シーケンサー再生した際に設定したオフセットの設定が無視されシーケンサー内のCineCameraActorのワールド座標に意図しない値が設定されます
再現手順
【再現手順】
処理はUE C++で全ておこなっております
ALevelSequenceActorに対して再生位置の変更するように下記の処理でプロパティを設定し再生
※Shippingパッケージ版、エディターで起動したときには再現しません
UDefaultLevelSequenceInstanceData* seq_inst_data = Cast<UDefaultLevelSequenceInstanceData>(DefaultInstanceData); bOverrideInstanceData = true; if (IsValid(seq_inst_data)) { seq_inst_data->TransformOrigin = FTransform::Identity; seq_inst_data->TransformOriginActor = nullptr; seq_inst_data->TransformOrigin = offset_origin; //再生したい位置にオフセットをかける
お世話になっております。
この問題は、Development/DebugビルドではTransformOriginの扱いが Shipping やエディタと異なるために発生している可能性があります。特に、TransformOriginActor = nullptrとした場合、シーケンス再生時にオフセットが無視されることがあります。TransformOriginActorにnullptrを設定する代わりに、オフセット位置に一時的なアクターを生成して設定してください。
問題が解決しない場合は、引き続きご連絡ください。ただ、来週まで、本社のサマーバケーションになっているため、返事がちょっと遅くなる可能性があります。
お手数ですが、よろしくお願いします。
ご回答ありがとうございます。
試しに、下記のようにActorを生成し設定したのですが今度はオフセットもかからなくなりました。
`UDefaultLevelSequenceInstanceData* seq_inst_data = Cast(DefaultInstanceData);
bOverrideInstanceData = true;
if (IsValid(seq_inst_data)) {
seq_inst_data->TransformOrigin = FTransform::Identity;
seq_inst_data->TransformOriginActor = GetWorld()->SpawnActor(
AActor::StaticClass(),
FTransform::Identity
};
seq_inst_data->TransformOriginActor->SetActorTransform(offset); //設定したTransformOriginActorにオフセットを設定` こちらの方で、エンジン内部のコードを別途調査しているのですが
UDefaultLevelSequenceInstanceDataのNativeGetTransformOriginkan関数ではTransformOriginActorでnullptrが設定されている場合は、TransformOriginの値を参照するようになっておりましたが、TransformOriginActorにnullptrを設定しててもTransFormOriginに値を設定すればオフセットは正しく反映されるのではないのでしょうか
virtual FTransform NativeGetTransformOrigin() const override { return TransformOriginActor ? TransformOriginActor->ActorToWorld() : TransformOrigin; }
>>追記
再生しているシーケンサーのデータは内部にshotが複数あるものです。
[Image Removed]
それぞれのshoto毎にCameraComponentが設定されております
[Image Removed]
お世話になっております。
何かわかりましたか?
そして追加質問ですが、デバッグビルドで実際にTransformOriginActorをnullにできたことを確認できましたか?
はい、TransformOriginActorは毎回nullに設定しております。
いろいろ試した結果、shotのようなサブシーケンスを含んだシーケンサーに対しては今回の問題が発生しないことが確認できました。
再度質問したいのですが、下記の処理ではサブシーケンスを含んだシーケンサーに対してはdevelopmentパッケージではTransformOrigin が適用されないということなのでしょうか
DefaultLevelSequenceInstanceData* seq_inst_data = Cast<UDefaultLevelSequenceInstanceData>(DefaultInstanceData); bOverrideInstanceData = true; if (IsValid(seq_inst_data)) { seq_inst_data->TransformOrigin = FTransform::Identity; seq_inst_data->TransformOriginActor = nullptr; seq_inst_data->TransformOrigin = offset_origin; //offset
お世話になっております。
現在調べているため、もうしばらくお待ちください。
お手数ですが、よろしくお願いします。
お世話になっております。
再現できる小さなプロジェクトの提供、お願いできますか?
お手数ですが、よろしくお願いします。
すみません、間違えました。
shotのようなサブシーケンスを含んだシーケンサーに対しては今回の問題が発生し、含まないものだと
下記の処理で、キーデータにオフセットが適用されました。
seq_inst_data->TransformOrigin = offset_origin; //offset