はじめに
UEのシーケンサーではBPで作成したイベントを指定フレームで実行することが可能で
イベントは以下の二つの方法で作成することができ、それぞれ利点と欠点があります。
方法①イベント実行のアクターを配置し、アクター側からイベントを実行させる
利点:
アクターを編集することで他シーケンサーでも使いまわすことが可能
欠点:
アクターにイベントが紐づくため、イベントの量が増えるほど視認性が悪くなってしまう
新規シーケンサーを作成の際に再度BPの再配置が必要
方法②シーケンサーの親クラスを変更し、親クラスのイベントを使用する
利点:
親クラスにイベントを追加するので、シーケンサー複製で同一のイベントをそのまま使いまわせる
イベントがシーケンサーに紐づくのでイベントのチャンネルの配置が自由になる
欠点:
プロジェクトが肥大化すると親クラスがどんどん大きくなってしまう
本記事ではこちらの作成方法を記載します。
1. クラスを作成する
プログラム側にULevelSequenceDirectorを継承したクラスを作成する
#include "LevelSequenceDirector.h"
UCLASS()
class MYPROJECT_API UMyLevelSequenceDirector : public ULevelSequenceDirector
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
void CharacterMove();
virtual void CharacterMove_Implementation() {}
};
BP側の作成でも可能ですが、プログラム側でしか触ることができない関数も多いためプログラムで作成を推奨します。
2. 継承するアクターを作成する
ブループリントクラスを作成し、先ほど作成したクラスを指定して生成する
3. Sequencerに親クラスを設定する
4. シーケンサーで親クラスで作成したイベントを追加する
親クラスに作成した関数を更新することで、すべてのシーケンサーに対して更新を反映させることが可能
この方法であれば、シーケンサー内で使用する関数の管理の手間が楽になるかと思います。
大量のシーケンサーを作成する場合は事前に空のシーケンサーを作成してテンプレート化することも有効です。