Timeline架构
Posted smallrainf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Timeline架构相关的知识,希望对你有一定的参考价值。
Playable架构
Playable组成
- Playable(ScriptPlayable
) - PlayableExtensions
- PlayableOutput(ScriptPlayableOutput)
- PlayableOutputExtensions
- PlayableBinding(ScriptPlayableBinding)
- PlayableGraph
- PlayableAsset
- PlayableBehaviour
Playable
Playable 是运行时节点,其中 ScriptPlayable
PlayableExtensions
PlayableExtensions 定义 Playable 扩展方法,包括 GetDuration() 等。
PlayableOutput
PlayableOutput 是输出节点,其中 ScriptPlayableOutput 属于自定义输出节点,其中包含封装 PlayableBehaviour 的 PlayableOutputHandler。
PlayableOutputExtensions
PlayableOutputExtensions 定义 PlayableOutpu t扩展方法,包括 GetUseData() 等。
PlayableBinding
PlayableBinding 描述 Output 和 Input 关系,其中 ScriptPlayableBinding 属于自定义绑定关系。
PlayableGraph
PlayableGraph 管理 Playable 集合。
PlayableAsset
PlayableAsset 继承 ScriptObject,保存 Playable 序列化数据。
PlayableBehaviour
PlayableBehaviour 实现用户自定义行为。
Playable调用链
Timeline架构
Timeline组成
- PlayableDirector
- TimelineAsset(PlayableAsset)
- Track(PlayableAsset)
- MixerBehaviour(PlayableBehaviour)
- Clip(PlayableAsset)
- Behaviour(PlayableBehaviour)
PlayableDirector
PlayableDirector 存储 Track Binding 和 Expose Reference,通过 TimelineAsset 构建 PlayableGraph 来驱动 Timeline。
TimelineAsset
TimelineAsset 存储和编译 Tracks,创建 PlayableBinding 并绑定 PlayableOutput 和 MixerBehaivour。
Track
Track 存储和编译 Clips,创建 PlayableBinding 到 PlayableOutput,实现默认 MixerBehaviour 来桥接 PlayableOutput 和 Clips 输出。
MixerBehaviour
MixerBehaviour 实现 Clip 混合,输出最终值到 PlayableOutput 上。
Clip
Clip 存储持久化数据。
如果引用场景物体,需要使用ExposedReference
Behaviour
Behaviour 输出最终值到 PlayableOutput 上。
Timeline调用链
- TimelineAsset 内部拥有 IntervalTree 来模拟驱动子 Playable,主要是 MixerBehaivour 和 PlayableBehaviour。
- TimelineAsset 在启动时实例化所有Playable。
- TimelinePlayable 通过绑定 TrackAsset 的 MixerBehaviour InputIndex 和 ScriptPlayableOuput 的 OutputIndex 来实现 Track 定向输出,其中 TimelinePlayable 相当于一个 Brige。
Timeline用法
- 监听输入,通过自定义 PlayableScript 实现 OnBehaviourPause 时暂停等待用户输入。
- 非线性 Timeline 。
- 嵌套游戏逻辑,由 Timeline 驱动游戏进程。
注意点
- Clip 可以通过 Template 创建对应的 Behaviour ,不用每次从 Clip 传递参数。
- 利用 CustomEditor 定制化 Clip InspectorGUI ,关于 SceneView 可以利用 Handles.PositionHandle 来辅助定位点。
- 对于 EditorGUI 需要动态修改值,使用 EditorGUI.BeginChangeCheck 和 EditorGUI.EndChangeCheck 来判断用户是否操作选项。
- OnBehaviourPause会在Clip超出Time或者Graph停止时触发,如果需要区分两种情况,利用 effectivePlayState=Playable.Playing 来判断是否为 Grapha 停止,有点类别
GameObject.activeSelf 和 GameObject.activeInHierarchy。
以上是关于Timeline架构的主要内容,如果未能解决你的问题,请参考以下文章