最近、Unrealengine4.26でブループリントでSeqeuence周りをさわっているのですが、非常に出来る事が増えていました。
しかし、ドキュメントは少なく、手探りで検証を進めた内容をメモとして残しておきます。
作成したブループリントは、**エディタユーティリティウィジェット**で実行しています。
環境
バージョン : Unrealengine4.26
オブジェクトをLevelSeqeuencerに配置する
実行結果です。ブループリント(BP_A)とスケルタルメッシュ(FbxSphere)が追加されます。
ノードの説明
- GetCurrentLevelSeqeuenceノード
SequenceEditorで開いているLevelSeqeuencerを取得できます。
当然ですが、LevelSeqeuencerが開かれていない場合は、IsValidが通りません。
- AddSpawnablefromClassノード
ブループリントをLevelSeqeuencerにBindできます。
- AddSpawnablefromInstanceノード
スケルタルメッシュやスタティックメッシュなどのオブジェクトをLevelSeqeuencerにBindできます。
- RefreshCurrentLevelSeqeuenceノード
SequenceEditorで開いているLevelSeqeuencerに更新をかけます。
こちらのノードを呼び出さない場合には、SequenceEditorに更新がかからず、LevelSeqeuencerを開き直す必要があります。
- SaveLoadedAssetノード
アセットを保存する事ができます。
サンプルノードの上の例だと、このノードが入っていない為、LevelSeqeuencerは保存されていない状態になっていると思います。
OnlyifisDirtyは、Dirty状態(アスタリスクが付いている)になっているアセットだけを保存するかのフラグとなります。
LevelSeqeuencerにフォルダを追加する
フォルダとその中にオブジェクトを追加しています。
ブループリントの流れとしては、ルートにフォルダを作成し、各オブジェクトをスポーンし、AddChildPbjectBindingノードを呼んでフォルダに関連付けます。
ノードの説明
- AddRootFolderToSeqeuenceノード
Sequencerにフォルダを追加します。NewFolderNameは、追加するフォルダ名です。
このノードで返ってくるのは、UMovieSceneFolderになります。
- AddChildObjectBindingノード
AddRootFolderToSeqeuenceノードで追加したフォルダに、オブジェクトを関連付けます。
AddRootFolderToSeqeuenceノードから返されるUMovieSceneFolderを第一引数にすれば、いくつでも同じ階層に置けます。
LevelSeqeuencerに配置したオブジェクトに親子付けする
オブジェクトにフォルダを追加するトラックサンプルです。
親子付けするには、UMovieScene3DAttachTrackとUMovieScene3DAttachSectionを使用します。
既に紹介したフォルダは、例外ですが、Sequencerに追加されるオブジェクトは、トラックとセクションを持っています。
トラックの中にセクションがあり、必ず二つとも必要になります。
トラックとセクションは、4.26だけでも多くの種類がブループリントで実装されていますが、必要なプロパティへのアクセスが出来なかったり、セクションに渡す構造体がブループリントからはアクセス出来いない部分もあり、PythonやC++で扱うケースがまだ多いようです。
このサンプルでは、C++でフォローしています。
ノードの説明
キャストノードの説明は省略します。
- MakeBindingIDノード
Sequencerに追加する為のBindingIDを作成します。ここで帰って来るのは、FMovieSceneObjectBindingIDになります。
- AddTrack & AddSectionノード
AddTrackは、任意のトラックを追加します。今回は使用していませんが、AddSectionも紹介します。
AddSectionも任意のセクションを追加します。ただ、AddTrackで帰ってきたUMovieSceneTrackをそのまま繋ぐため、引数を気にする必要はありません。
AddSectionが実行されれば、トラックに対応したセクションが追加されるようです。
- AddConstraintノード
C++で実装が必要だった部分になります。
このノードは、UMovieScene3DConstraintTrackのAddConstraintを呼び出しています。
引数は、AddConstraintを実行する為のものです。
ブループリントから、ConstraintBindingIDをUMovieScene3DAttachSectionに渡す方法は、実装されておらず、C++を使用しています。
AddSectionノードを使用していない理由は、**AddConstraintで、AddSectionが実行される為**です。
UMovieScene3DAttachSectionにブループリントからでもアクセス可能な、AttachSocketNameとAttachComponentNameとConstraintBindingIDのセッターが用意されている為、ブループリントで完結するように見えますが現バージョンでは、SetConstraintBindingIDは正しく動作しない為、ConstraintBindingIDを別の方法で渡せれば実現可能かもしれません。
- SetRangeノード
SetRangeは、セクションの範囲を決めます。UMovieSceneSectionで実装されている為、UMovieScene3DAttachSectionに限らず、どのセクションでも使用します。
SetRangeは、この範囲を設定する為のものです。
- FrameNumberノード
FrameNumberは、Seqeuencer系の動作で主に使用されています。
以上となります。
C++からのフォローがいるとは言え、ブループリントで完結する部分も増えてきました。
今後のバージョンアップに期待です。