エンジニアっぽくなりたい

UnityやUnrealEngine 4などでなにか役に立ちそうなことを発信していく。

UE5 シーケンサーで自作トラックを活用する(1)~最小構成で作ってみる~

シーケンサーでいろいろ制御するときに、プロジェクト都合に合わせた独自の処理をしたくなることありますよね。
それでトラックとか自作したくなるわけですが、いろいろと調べて自分なりにやってみました。

 

 

やりたいこと

シーケンサーのトラックを自作する。
ひとまずエンジン純正のEventTrackのTriggerのような挙動を目指す。
※キーに情報を仕込んで、そのタイミングでそれに応じた処理が行われる感じ。
また、今回はプラグインとして実装します。

 

環境

UE 5.4.4
VisualStudio 2022 17.11.1

 

作戦

エンジンコードを眺めていた感じ以下が参考になりそうなので、それらを基に対応する。

トラック系のサンプルのようなコード
Engine\Source\Runtime\MovieScene\Private\Tests\
 MovieSceneTestObjects.h
 MovieSceneTestObjects.cpp

純正のイベントトラック関連
Engine\Source\Runtime\MovieSceneTracks\Public\Tracks\
 MovieSceneEventTrack.h

Engine\Source\Runtime\MovieSceneTracks\Private\Tracks\
 MovieSceneEventTrack.cpp

Engine\Source\Runtime\MovieSceneTracks\Public\Sections\
 MovieSceneEventSection.h

Engine\Source\Runtime\MovieSceneTracks\Private\Sections\
 MovieSceneEventSection.cpp

Engine\Source\Runtime\MovieSceneTracks\Private\Evaluation\
 MovieSceneEventTemplate.h

Engine\Source\Runtime\MovieSceneTracks\Private\Evaluation\
 MovieSceneEventTemplate.cpp

Engine\Source\Editor\MovieSceneTools\Private\TrackEditors\
 EventTrackEditor.h
 EventTrackEditor.cpp

トラック関連をシーケンサーと紐づけている様子
Engine\Source\Editor\MovieSceneTools\Private\
MovieSceneToolsModule.cpp

 

やってみた

先に結果を以下に記述します。
※すべて書くとなかなかの量になってしまうのでGithubにて確認お願いします。

関連コミットのみはこちら

github.com

 

全体はこちら

github.com

 

この対応により以下のようにシーケンサーからトラックを設定できたり。


セクションの追加やキーの追加、またキーの詳細に指定したパラメーターが設定できたり。

 

シーケンサーを再生するとそのキーのタイミングで処理がされるようにできたり。
※今回の対応ではログがでるようにしているだけなので、以下のようになってます。

 

という感じです!!!!

 

いやいや、まだまだこれじゃやりたいことに達してないよ!! って気持ちはわかりますので今後この続きの記事を書いていければと思っております!!!

 

対応内容

それとなく対応内容を記述していきます。

プラグイン作成

適当にプロジェクトを作成して、
「SequencerCustomPlugin」というプラグインを作成します。
この時、エディター用モジュールも追加しておきましょう。

トラック関連のクラス、処理作成

主にMovieSceneTestObjects.h、MovieSceneTestObjects.cppを見てそれっぽいクラスを確認し、それっぽいクラスを検索するとMovieSceneEventTrack系をパクるのがわかりやすいかも ってを感じました。

なのでMovieSceneEventTrack系を思いっきりパクっています。

主にトラック関連で必要になるのは以下

  • MovieSceneTrack
    • ランタイムのトラッククラス。
  • UMovieSceneSection
    • ランタイムのセクションクラス。
  • FMovieSceneEvalTemplate
    • 実行時の処理を行ってます。
  • FMovieSceneChannel
    • セクションのキーの中身です。
  • FMovieSceneTrackEditor
    • エディター用クラス。
    • シーケンサー上でのトラックの処理に関わっています。
    • これがないとメニューに追加されなかったりする。
  • (FSequencerSection)※今回作ってません。

これらをEventTrackに倣って作成します。

今回は「FMovieSceneChannel」ではいくつかのパラメーターを設定できるようにし、「FMyMovieSceneEventEvalTemplate」でキーを判定してそのパラメーターをログで表示する という処理で作成しています。

シーケンサーに登録

シーケンサーのメニューからトラックを追加できるようにする。

FMovieSceneToolsModule::StartupModule()の処理に倣って、プラグインのエディターモジュールの「FSequencerCustomPlugin_Editor::StartupModule()」で同様の登録処理を行っています。

これによって作成したトラックが追加できるようになります。

 

これらにより、トラックが利用できるようになりました。

 

懸念点

今回参考にした「UMovieSceneEventTrack」の「UMovieSceneEventTrack::CreateTemplateForSection」で以下のような処理がある。

if (const UMovieSceneEventSection* LegacyEventSection = Cast<const UMovieSceneEventSection>(&InSection))

「LegacyEventSection」という印象から、この方式の処理はもしかしてLegacyなの?って感じちゃったりします。

※実際現在のバージョンで普通の手順で作成する場合この処理は通らない。

ちょっと心配ですね。

でも使えてるし大丈夫っしょ!!!

 

思ったこと

ということで自作トラックやってみたわけですが、一応これでも十分使える気はしています。
とはいえもうちょっといろいろやりたいところです。
パッと浮かぶところでは以下

  • トラック追加対象を絞る
  • Transformトラックのようなパラメーター追加
  • セクション前後のリストア処理
  • セクション上の表示
  • トラック、セクションクラスの活用

という感じ。

今後もこれらについて記述していきます。

ということで今年もよろしくお願いします。

 

以下に続きを書いています。

naoxgames.hatenablog.jp

 

なにかあればご指摘お願いいたします!!!