お世話になっております。
<br/>
以下のようなコードでショットのレベルシーケンスのFMovieSceneSequenceIDを取得しているのですが、PIEでは取得できるものの、Packageで確認すると取得することができませんでした。
// イメージです
struct FSubsequenceVisitor : UE::MovieScene::ISequenceVisitor
{
public:
TWeakObjectPtr<ULevelSequencePlayer> Player;
virtual void VisitSubSequence(UMovieSceneSequence* InSequence, const FGuid&, const UE::MovieScene::FSubSequenceSpace& LocalSpace) override
{
if (!InSequence) { return; }
UMovieScene* MovieScene = InSequence->GetMovieScene();
if (!MovieScene) { return; }
FMovieSceneSequenceID SequenceId = Player->State.FindSequenceId(InSequence);
if (!SequenceId.IsValid())
{
// ショットのSequenceIdを取得できない
}
}
};
UE::MovieScene::FSequenceVisitParams Params;
Params.bVisitRootTracks = true;
Params.bVisitSubSequences = true;
FSubsequenceVisitor SubsequenceVisitor(LevelSequencePlayer);
VisitSequence(LevelSequencePlayer->GetSequence(), Params, SubsequenceVisitor);
<br/>
確認したところ、PIEではObjectCachesにショットのキャッシュがあったのですが、Packageではありませんでした。
PIEは FCompiledDataVolatilityManager::Construct() の FCompiledDataVolatilityManager::ConditionalRecompile() を経由してキャッシュがつくられており、EMovieSceneSequenceFlags::Volatile が関係してそうというところまでわかりました。
<br/>
LevelSequenceは動的な変更はしておらず、EMovieSceneSequenceFlags::Volatileを指定する理由はないように思うのですが、何かお気づきのことがあればご教示いただけますと幸いです。
<br/>
以上、よろしくお願いいたします。