PackageでFMovieSceneEvaluationState::FindSequenceId()を使ってショットのFMovieSceneSequenceIDを取得することができない

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

<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/>

以上、よろしくお願いいたします。

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

PIEでは正しく動作いたしますが、パッケージビルドでは動作しない理由は、

PIEではエディタが自動的に再コンパイルして評価キャッシュを作成するのに対し、

パッケージビルドではそのようなエディタ専用の仕組みが機能しないためでございます。

さらに、FindSequenceIdはシーケンスのポインタが完全に一致していることを前提としておりますが、

実行時にはサブシーケンスがインスタンス化されるため一致しない場合が多く、

また呼び出しのタイミングが早すぎますとステートマップがまだ準備されていないことがございます。

最も簡単な解決策はFindSequenceIdを呼ばないことです。

ISequenceVisitorを用いて走査いたしますと、各サブシーケンスに対応する正しいFMovieSceneSequenceIDが既に渡されますので、

それをご利用ください。もしご使用中のエンジンのバージョンでその情報が提供されない場合には、

プレイヤーの評価階層から初期化後にIDを取得する方法がございます。

これによりパッケージビルドでも安定して動作できます。

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

VisitSubSequence()の引数FSubSequenceSpaceに含まれるSequenceIDに正しいIDが含まれていることを確認しました。

これで解決できましたので、この質問はクローズで問題ございません。

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