お世話になっております。
<br/>
World Partition を無効にしたパーシスタントレベル(以下 PLV)において
レベルブループリントでLoadLevelInstanceノードで別のレベル(以下 LV_A)をロードし
レベルシーケンスを再生してLV_AのアクターのTransformをアニメーションさせようとしているのですが、PLVをプレイして確認するとアニメーションされませんでした。
<br/>
LV_Aのレベルブループリントで同様の処理を組んで
LV_Aをプレイするとアクターはアニメーションされます。
<br/>
PLVをプレイ中にレベルシーケンスを開いて
アクターのトラックにマウスオーバーすると
「このトラックにバインドされたオブジェクトはありません」と表示され、バインドがきれているようでした。
<br/>
レベルシーケンス上のLV_AのアクターはPossessableになっています。
<br/>
ULevelSequenceActor::AddBindingByTag()などで動的にバインドすればアニメーションするとは思うのですが、レベルシーケンスでタグをつける等(どれにバインドするか特定するための)作業が発生するので、別の方法があれば検討したいです。
<br/>
この場合どうするのがよいのか、ご教示いただけますと幸いです。
<br/>
以上、よろしくお願い致します。
お世話になっております。
レベルインスタンスに含まれるアクターへのパスはレベル内でのものと異なるため自動的なバインドには失敗します。
LevelSequenceActor をバインド先のアクターと同じレベルに配置するのが手頃な対処になるかと思いますが、これには幾つかの方法が考えられます。
■静的に配置
レベルエディタで LV_A に LevelSequenceActor を配置しておきそれを利用する
■BPで動的に配置
Spawn Actor from Class (LevelSequenceActor) ノードの Owner にロードされた LV_A 内のいずれかのアクターを指定する
■C++ で動的に配置
UWorld::SpawnActor 関数のパラメータ構造体 FActorSpawnParameters::OverrideLevel にロードされた LV_A を指定する
ULevelSequencePlayer::CreateLevelSequencePlayer 関数を元にすると良いかもしれません
よろしくお願いいたします。
ご回答ありがとうございます。
「BPで動的に配置」と「C++ で動的に配置」を試しまして、どちらもレベル上のアクターを制御できることを確認しました。ありがとうございます。
追加の質問です。
どちらの方法もレベル(LV_A)を指定することになるので、LV_Aのほか複数のレベルがある場合には再生するレベルシーケンスがどのレベルのアクターを制御するものなのか対応関係が必要かと思うのですが、レベルシーケンスからどのレベルのアクターを制御するか判断することはできますか?
以上、よろしくお願いいたします。
ご確認ありがとうございます。
レベルシーケンスそのものは基本的にレベルへの参照を持ちません。
ただしレベル上のアクターがバインドされている場合はソフト参照が存在しますので、エディタにおいては IAssetRegistry::GetDependencies を通じて参照先のレベルを検出することが可能ではあります。
[Image Removed]
この方向の対応付けが実行時に必要である場合、前もってエディタ上の処理によって何らかの形で対応関係を保存しておくことになるかと思います。
よろしくお願いいたします。
ご回答ありがとうございます。
参考になります。
必要なことは確認できましたので、こちらクローズで問題ございません。
ご対応ありがとうございました。