【Unity3d】【Timeline】Timeline的使用研究
企业开发
2023-10-03 14:33:58
阅读次数: 0
1. Playable相关内容梳理
- struct PlayableGraph:
- playable相关的图(graph)
- 管理playable的创建和销毁
- 图:节点和边
- 节点:playable
- 边:connection
- 产生链接:Connect: output -> input
- 断开链接:DisConnect::input -> output
- mix: 节点列表,每个节点的权重
- 播放相关:
- Play
- Stop
- IsPlaying,IsDone
- Envaluate
- 参数相关:
- 生命周期相关:
- struct Playable: 文档中有详细的描述与playableGraph的关系,和playableOutput是什么
- 描述
- playables可以被PlayableGraph链接在一起,生成复杂的行为(behaviours)
- 是可定制的运行时objects
- Playables可以被用来生成复杂的和灵活的数据Evaluation Trees.
- Playables是graph的节点,被connected之后,可以为每个playable节点设置weight和influence
- playableGraph描述
- 输出PlayableOutput:一个PlayableGraph可以有多个输出,输出也被称为“players”,输出实现了IPlayableOutput接口。
- PlayableOutput将source playable的结果应用于场景中的Object. (将playable的计算结果,应用到object上)
- 举例说明,AnimationPlayableOutput, 将graph中的source playable(动画帧曲线) 结算结果应用到场景中的Animator上。当graph播放,动作pose就是graph的evaluation结果,被应用到Animator上。
- ScriptPlayable:特殊类型的Playable
- T为可定制的playable.(即,可以定制如何进行计算)
- T必须继承子PlayableBehaviour。进而playableBehaviour中,可以制定某个时刻如何在graph中采样。
- 联系:
- 当一个PlayableGraph播放了,每个PlayableOutput都会被遍历。
- 在遍历期间,会调用每个Playable的PrepareFrame方法。这样,Playable就可以自己准备下一次的采样。
- 在PrepareFrame阶段,每个Playable都可以修改自己的children(增加新输入,或者删除输入)。这样,使得在运行时 Playable tree可以动态生成新的children分支。
- 一旦准备阶段结束,PlayableOutputs开始负责处理结果,这就是为什么输出被称为players.比如,一个AnimationPlayableOutput,Animator负责处理graph的计算结果如何表现。对于一个ScriptPlayableOutput,PlayableBehaviour.ProcessFrame会被在每个ScriptPlayable中调用。
2. Timeline的使用
1.PlayableDirector组件:
- 用于读取TimelineAsset数据,执行TimelineAsset的数据。
- 文档中的Timeline instance,实际就是指一个PlayableDirector实例组件。
- PlayableDirector将数据和表现联系起来
- TimeLineWindow修改的是TimelineAsset数据。
- 同一个TimelineAsset可以同时被多个PlayableDirector播放使用。
- Bindings:
- 每个Track的绑定Object。
- PlayableBinding: TimelineAsset(PlayableAsset)的outputs,用于与表现联系:
- sourceObject: TimelineAsset中,是TrackAsset
- eg.AnimationTrack,或者ActivitionTrack.
- streamName: TimelineAsset中,是Track的名字。
- sourceBingdingType: TimelineAsset中,是当前Track的绑定Object的类型。
- eg. AnimationTrack的是Animator;ActivitionTrack的绑定类型是GameObject.
- 设置PlayableDirector的Binding:
- Bingding是什么:
- 是TrackAsset绑定的Object。 一个TrackAsset只能绑定一个。
- 使用情景:TimelineAsset的Track中有binding object,动态指定
- 使用方式:
- 遍历PlayableAsset.outputs,根据每一个output(PlayableBinding)需要的sourceObject/streamName/sourceBindingType进行Bingding
- playableDirector.SetGenericBinding(output.sourceObject,TargetObject);
- 设置PlayableDirector的ReferenceValue
- ReferenceValue是什么
- 是PlayableAsset(ClipAsset)中,可能引用到的场景中的Object实例
- 每个ClipAsset可以引用多个。
- 使用情景:
- 某个ClipAsset中,需要动态设置一个target GameObject
- 使用方式
- 遍历PlayableAsset.outputs,根据每一个output(PlayableBinding)需要的sourceObject/streamName/sourceBindingType进行类型判断
- playableDirector.SetReferenceValue(new PropertyName(id/name/other),targetObject)
- 获取的时候,在clipAsset中,设置ExposedReference refValue
- refValue.exposedName = “传入的name”
- T tInst = refValue.Resolve(graph.GetResolver())
2. Markers 发送通知(2019.1添加)
- 注意:
- 在Head area,通知的接收者是PlayableDirector所在的GameObject
- 如果在Track中,通知的接收者是binding的Object
- 观察者模式: observer - notification
3. Timeline Signals触发事件:
- 扩展Marker,得到的Track-Clip-Behaviour
3. 结构梳理
- 数据 - asset
- 逻辑 - behaviour/playableDirector
- 数据计算-playable/playablegraph
- 数据:
- TimelineAsset
- TrackAsset
- PlayableAsset
- 逻辑
- PlayableDirector - playableAsset(timeline asset)
- PlayableBehaviour - playableAsset
参考资料:
- https://blog.unity.com/technology/extending-timeline-a-practical-guide
- https://docs.unity3d.com/Packages/[email protected]/manual/tl_about.html
- https://docs.unity3d.com/Manual/Playables.html
- https://docs.unity3d.com/Manual/Playables-Graph.html
- https://blog.unity.com/technology/unity-2017-1-feature-spotlight-playable-api
- https://github.com/UnityTechnologies/ATerribleKingdom
- https://blog.unity.com/technology/how-to-create-custom-timeline-markers
- https://github.com/Unity-Technologies/TimelineMarkerCustomization
- https://docs.unity3d.com/Packages/[email protected]/api/UnityEngine.Timeline.Marker.html
- https://blog.unity.com/technology/creative-scripting-for-timeline
- https://blog.unity.com/technology/how-to-use-timeline-signals
转载自blog.csdn.net/yanchezuo/article/details/125219879