Timeline架构

Posted smallrainf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Timeline架构相关的知识,希望对你有一定的参考价值。

Playable架构

Playable组成

  • Playable(ScriptPlayable
  • PlayableExtensions
  • PlayableOutput(ScriptPlayableOutput)
  • PlayableOutputExtensions
  • PlayableBinding(ScriptPlayableBinding)
  • PlayableGraph
  • PlayableAsset
  • PlayableBehaviour

Playable

Playable 是运行时节点,其中 ScriptPlayable 属于自定义节点,其中包含封装 PlayableBehaviour 的 PlayableHandler。

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调用链

sequenceDiagram Note right of PlayableAsset: 预设脚本或者自定义脚本ScriptPlayable<T> PlayableAsset->>Playable: 实例化 PlayableAsset->>PlayableBinding: 描述Output和Input关系 Note right of PlayableBinding: 预设脚本或者自定义脚本ScriptPlayableOutput<T> PlayableBinding->>PlayableOutput: 实例化 PlayableOutput-->>Playable: 绑定输出 Playable->>PlayableGraph: 添加 PlayableOutput->>PlayableGraph: 添加

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来获取,通过运行时候 PlayableDirector 的 Resolver 来获取 object。

Behaviour

Behaviour 输出最终值到 PlayableOutput 上。

Timeline调用链

sequenceDiagram 调用者->>PlayableDirector: 调用Play/Stop等接口 PlayableDirector->>PlayableGraph: 实例化 PlayableGraph->>TimelinePlayable: 编译TimelineAsset PlayableDirector-->>TimelinePlayable: 编译TimelineAsset TimelinePlayable->>TrackAsset: 编译所有Track资源 TrackAsset->>MixerBehaviour: 生成混合器 TrackAsset->>TimelineClip: 编译所有Clip资源 TrackAsset->>ScriptPlayableBinding: 实例化 TimelinePlayable-->>ScriptPlayableBinding: 添加Output和Input绑定关系 ScriptPlayableBinding->>ScriptPlayableOutput: 实例化 ScriptPlayableOutput->>TimelineClip: 绑定
  1. TimelineAsset 内部拥有 IntervalTree 来模拟驱动子 Playable,主要是 MixerBehaivour 和 PlayableBehaviour。
  2. TimelineAsset 在启动时实例化所有Playable。
  3. TimelinePlayable 通过绑定 TrackAsset 的 MixerBehaviour InputIndex 和 ScriptPlayableOuput 的 OutputIndex 来实现 Track 定向输出,其中 TimelinePlayable 相当于一个 Brige。

Timeline用法

  1. 监听输入,通过自定义 PlayableScript 实现 OnBehaviourPause 时暂停等待用户输入。
  2. 非线性 Timeline 。
  3. 嵌套游戏逻辑,由 Timeline 驱动游戏进程。

注意点

  1. Clip 可以通过 Template 创建对应的 Behaviour ,不用每次从 Clip 传递参数。
  2. 利用 CustomEditor 定制化 Clip InspectorGUI ,关于 SceneView 可以利用 Handles.PositionHandle 来辅助定位点。
  3. 对于 EditorGUI 需要动态修改值,使用 EditorGUI.BeginChangeCheck 和 EditorGUI.EndChangeCheck 来判断用户是否操作选项。
  4. OnBehaviourPause会在Clip超出Time或者Graph停止时触发,如果需要区分两种情况,利用 effectivePlayState=Playable.Playing 来判断是否为 Grapha 停止,有点类别
    GameObject.activeSelf 和 GameObject.activeInHierarchy。

以上是关于Timeline架构的主要内容,如果未能解决你的问题,请参考以下文章

echart 如何修改timeline间距?

el-timeline嵌套el-timeline使用时,子级el-timeline节点时间线不显示

Timeline简单配置

Timeline

Chrome开发者工具-Timeline面板

基于Unity3D之TimeLine的讲解(一)