SequencerでBinding IDから参照しているトラックの逆引きをしたい

Sequencerの構造整理を目的として、​特定のBinding IDを参照しているトラックを一覧表示、

また必要に応じてIDの一括置換を行うツールを作成しようとしています。

例えば、下記画像の「SampleActorParent」のBindingIDから、

参照している「SampleActor」親子付けトラック、​サブシーケンスに存在する「CriAtom」Attachトラックを一覧・一括置換をしたいです

[Image Removed]

​[Image Removed]

​このツールを作るうえで私が考えたアプローチは

全トラックを取得して、​リフレクション機能を使用してFMovieSceneObjectBindingID型のプロパティを全探索する方法ですが

Structの深い位置に保持していたり、TArrayとして保持していたりと、全探索するのが​中々にハードルがありそうでした。

こちらの一覧機能、一括置換をするうえで推奨する方法や、参考になるコードがありましたら

教えていただけると大変助かります。

お手数をおかけしますが、ご回答お願い致します。​

お世話になっております。

RootSequenceへのポインタを取得した後、

UMovieSceneSection::GetReferencedBindings()を使用してBindings参照を取得してみましたか?

https://dev.epicgames.com/documentation/ja\-jp/unreal\-engine/API/Runtime/MovieScene/UMovieSceneSection/GetReferencedBindings

ご返答ありがとうございます。

頂いた関数で参照Bindingの取得が確認できました。

UMovieSceneSection::GetReferencedBindings()

取得方法 )UMovieScene::GetAllSectionsで全Sectionを取得し、上記関数で取得する

同じく、UMovieSceneSection::OnBindingIDsUpdated コールバック関数が見受けられましたので

BindingID参照置換はこちらの利用を検討したいと思います。

コールバック呼び出し方法 )

void FSequencerUtilities::UpdateBindingIDs(TSharedRef<ISequencer> Sequencer, FGuid OldGuid, FGuid NewGuid)

追加の質問で恐縮ですが

上記のUpdateBindingIDsで各SectionのOnBindingIDsUpdatedを呼び出す方法の他に

BindingIDに関連付けられている、Binding Track 自体を差し替える関数が見受けられました。

UMovieScene::ReplaceBinding | Unreal Engine 5.6 Documentation | Epic Developer Community

1. 各Sectionの参照BindingIDを差し替える

2. BindingIDに関連付けられるBindingTrackを差し替える

違いかと思いますが、どちらが推奨される方法といったものはありますでしょうか?

すみませんが、ご回答お願い致します。

立て続けに質問失礼します。

下記関数ですが、一部参照しているBindingsを取得・置換できないSectionが存在しました

UMovieSceneSection::GetReferencedBindings()

UMovieSceneSection::OnBindingIDsUpdated

下記オーディオ トラックはUMovieSceneAudioSectionを持ち、

FMovieSceneActorReferenceData AttachActorData変数でBindingIDをキー設定可能な「アタッチ」プロパティを持っています。

[Image Removed]UMovieSceneAudioSection | Unreal Engine 5.6 Documentation | Epic Developer Community

上記のSectionから参照されるBindingIDも取得・置換を行いたいのですが、そのための方法があれば教えていただけますと幸いです。

お世話になっております。

GetReferencedBindingsやOnBindingIDsUpdatedでは拾えないケースとして、UMovieSceneAudioSectionのAttachActorDataのようにFMovieSceneActorReferenceData内にBindingIDを持っているものがあります。

パーフォマンス目線でちょっと不安がありますが、その場合は、通常のセクションについてはこれまでどおりGetReferencedBindingsとFSequencerUtilities::UpdateBindingIDsを使い、特殊なケースだけFMovieSceneActorReferenceDataのDefault値やキーを直接見てBindingIDを差し替える、という方法が現実的かと思います。

もしトラックそのものを入れ替えたい場合はUMovieScene::ReplaceBindingも使えますが、こちらはセクション内部の参照までは触らないので用途が少し違いますね。

こういったやり方は検討されたことありますか?

お世話になっております。

返信が遅くなり申し訳ありません。

> FMovieSceneActorReferenceDataのDefault値やキーを直接見てBindingIDを差し替える、という方法が現実的かと思います。

こちらの値には実際にアクセス可能・書き換えることで参照BindingIDを切り替えることができました。

実際にはPropertyIteratorでFMovieSceneActorReferenceDataまたはFMovieSceneObjectBindingIDの二種類を探して、両方とも直接値を参照・置換しています。

こちらで作成したいツールの実現ができそうです。

ご対応ありがとうございました。

実際の実装については、ご提示いただいたFSequencerUtilities::UpdateBindingIDsを参考に、FMovieSceneActorReferenceDataの分岐を追加してOnBindingIDsUpdatedが実装されていないSectionに対しては直接書き換えようと思います。