From 69550aef562c4ebe107b3c225b6d79c1cea10a48 Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Sat, 18 May 2024 22:21:14 +0800 Subject: [PATCH] vault backup: 2024-05-18 22:21:14 --- .../Sequence/Sequence Runtime Binding.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/03-UnrealEngine/Sequence/Sequence Runtime Binding.md b/03-UnrealEngine/Sequence/Sequence Runtime Binding.md index 0382563..7ca0d75 100644 --- a/03-UnrealEngine/Sequence/Sequence Runtime Binding.md +++ b/03-UnrealEngine/Sequence/Sequence Runtime Binding.md @@ -6,7 +6,8 @@ tags: rating: ⭐ --- # 前言 -***MovieSceneTextTrack ***引擎插件可以作为参考。 +***MovieSceneTextTrack*** 引擎插件可以作为参考。 +***UMovieSceneCVarTrackInstance*** 参考: 1. [sequencer mute tracks at runtime from c](https://forums.unrealengine.com/t/sequencer-mute-tracks-at-runtime-from-c/476278/3) @@ -62,6 +63,9 @@ UMovieSceneSequenceExtensions methods are not exported. They don’t have the PL - LevelSequence分析 - https://zhuanlan.zhihu.com/p/157892605 +## UMovieSceneTrackInstance +大部分Track的instance类。 + ## 继承关系 UMovieSceneSignedObject -> UObject。一个UMovieScene由若干个MasterTrack(UMovieSceneTrack)组成,UMovieScene相当于是UMovieSceneTracks的容器,那么UMovieSceneTrack又由UMovieSceneSections组成,UMovieSceneSection就是一个Track中间的某一段。 @@ -415,6 +419,41 @@ void UMovieSceneSequencePlayer::UpdateMovieSceneInstance(FMovieSceneEvaluationRa } ``` +这段解析来自于:https://zhuanlan.zhihu.com/p/413151867 +```c++ +UMovieSceneSequencePlayer::Play() //蓝图中调用 +UMovieSceneSequencePlayer::PlayInternal() +UMovieSceneSequencePlayer::UpdateMovieSceneInstance +RootTemplateInstance.Evaluate(Context, *this); + +// FMovieSceneRootEvaluationTemplateInstance::Evaluate +EntitySystemRunner.Update(Context, RootInstanceHandle); + +FMovieSceneEntitySystemRunner::Flush() +FMovieSceneEntitySystemRunner::DoFlushUpdateQueueOnce() +FMovieSceneEntitySystemRunner::GameThread_ProcessQueue() +FMovieSceneEntitySystemRunner::GameThread_SpawnPhase() + +// FMovieSceneEntitySystemRunner::GameThread_SpawnPhase() +/// System Linker->GetInstanceRegistry(); +FInstanceRegistry* InstanceRegistry = GetInstanceRegistry(); +FSequenceInstance& Instance = InstanceRegistry->MutateInstance(Update.InstanceHandle); +Instance.Update(Linker, Update.Context); + +// FSequenceInstance::Update +SequenceUpdater->Update(Linker, Params, ComponentField, EntitiesScratch); + +// FSequenceUpdater_Flat::Update +FSequenceInstance& SequenceInstance = Linker->GetInstanceRegistry()->MutateInstance(InstanceHandle); +SequenceInstance.Ledger.UpdateEntities + +// FEntityLedger::UpdateEntities +FInstanceRegistry* InstanceRegistry = Linker->GetInstanceRegistry(); +ImportEntity(Linker, ImportParams, EntityField, Query); +} +``` + + 暂停的核心逻辑: ```c++ FMovieSceneEvaluationRange CurrentTimeRange = PlayPosition.GetCurrentPositionAsRange();