【UE4】LevelSequenceでTrackとして追加されているActorのインスタンスを取得してイベントを呼び出す【UnrealEngine4】
はじめに
開発をしていてLevelSequence経由で発生させたいイベントがあり、LevelSequenceにBindされているActorの関数を呼び出そうと思ったら、SequenceDirector内でどうやってインスタンスを取得するのか調べてもわかりませんでした
Additional Event Receiversを使いたいのに、どこのサイトも「実際にレベルに配置する」のが前提で書かれており、Additional Event Receiversはレベルに配置しないと設定できないように思えたので動的に再生するLSを切り替えるケースではどうすればいいのかわかりませんでした
色々試していたらできたのでその手順をまとめておきます
もっといいスマートな方法があったら教えてください
環境
UE4.23.1
VisualStudioCommunity2017
Windows10
事前準備するもの
LevelSequenceを用意する
呼び出したい自作のBP公開されている関数を持つC++クラスを継承したBPクラス
今回用意したクラスはこちら
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyActor.generated.h" UCLASS() class IMGUI_PRJ_API AMyActor : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties AMyActor(); public: UFUNCTION(BlueprintCallable, Category = "Test Actor") void TestFunction(); UFUNCTION(BlueprintCallable, Category = "Test Actor") void BoolFunction(bool hoge); };
#include "MyActor.h" void AMyActor::TestFunction() { GLog->Log("TestFunction"); } void AMyActor::BoolFunction(bool hoge) { GLog->Log("BoolFunction"); }
手順
1. LevelSequenceを開く
※レベルに配置されてないのでDetailウィンドウにはなにも表示されません
2. 「Track > Actor to Sequence」からBP_MyActorを追加する
3. BP_MyActorの下にEventトラックを追加する
4. 追加したEventトラックを右クリックしてプロパティからBP_MyActorをEvent Receiversに登録する
5. キーを作成し、キーを右クリックからCreateQuickBindingからBP公開されているイベントを呼ぶ
5-2. BP_MyActorの下につけてないEventトラックではEvent Receiversに登録してもCreateQuickBindingが出てこないので注意
6. 追加すると確認LevelSequenceDirectorが開き、BP_MyActorのインスタンスを引数で持ってこれているのが確認できる(完)
6-2. LevelSequenceから呼ぶイベントにtarget以外の引数を増やしたらイベントそのものが無効になるので注意
さいごに
ざっくりまとめました
これややこしくない?これ以外にスマートな方法がある気がしてならないんですが、誰か教えてくれませんか?
気軽にコメントよろです