【Unity博客节选】Timeline 静态结构分析

注:软件版本Unity 6.0 + Timeline 1.8.7

作者:CSDN @ RingleaderWang
原文:《Unity第25期——Timeline结构及其源码浅析》
文章首发Github👍《Timeline结构及其源码浅析》

Bilibili 视频版👍👍《Timeline结构及其源码解析》https://www.bilibili.com/video/BV1bHjYzNE35

Timeline 静态结构分析

后面我们会了解到,在运行时,timeline会生成树形结构的PlayableGraph,那谁指导它生成呢?就是PlayableAsset,这即是Timeline的静态结构

在Timeline窗口编辑资产后,形成资产树(也是树形结构的,根节点TimelinePlayable,下一层是root track/output track,再下一层是 PlayableAsset)。

PlayableDirector添加timeline资产,然后设置binding后 ,director就能管理整个timeline资产了。

等后面director组件初始化 ,并根据timeline资产树实例化为对应的TimelineAsset后,便能以有序生成各个Playable

所以想理解运行时Timeline就必须先搞明白 静态Timeline的结构,并理清各PlayableAsset类的关系,以及clip和track、playTarget与track的关系(即Binding)。

PlayableAsset 静态资产

在Timeline窗口创建两个Track(Activation Track、Audio Track),并分别添加对应的clip。如下:

这个扩展名为 ".playable"的 timeline 文件,就是所谓的静态资产。

timeline资产文件实例化后就是TimelineAsset类,TimelineAsset下一层是TrackAsset,TrackAsset包含数个PlayableAsset(比如AnimationPlayableAsset、AudioPlayableAsset等)。

结构图如下:

对应的Timeline.playable yaml文件如下图所示:


实例化时,会根据这个yaml文件解析成 PlayableAsset节点链(利用PlayableAsset的parentchildren参数),根节点(Root PlayableAsset)是TimelineAsset,下一层是Root Track,对于Group track或者AnimationTrack允许其下还有SubTrack,每个Track都可以包含数个PlayableAsset

  • root PlayableAsset:就是TimelineAsset,是所有root track的父级节点。
  • root track:就是TimelineAsset的直接子track,从timeline窗口看就是最外层track。
  • output track: 会生成PlayableOutput的track。除 GroupTrack、subGroupTrack、override track外的所有track 都是 output track。

红框为root track,黄框为output track

PlayableDirector

用Timeline窗口查看timeline资产有两种方式,产生的效果会不同:

  • 第一种是从Project窗口打开的独立timeline资产,它无法预览播放,track左侧也没有绑定对象;
  • 另一种就是从挂载PlayableDirector组件对象点开,那么它的timeline就是可预览播放的,track左侧也会显示Bindings

第二种其实就是PlayableDirector组件做的绑定。

  • PlayableDirector利用key-value 来实现绑定。
  • key就是Track对象(在PlayableBinding中被称作sourceObject).
  • value 就是目标对象(在PlayableOutput中被称作target),如ActivationTrack对应的就是待控制的预制体,AudioSourceTrack对应的就是Audio Source组件 ,AnimationTrack 对应的就是Animator。

PlayableDirector组件中SceneBindings值

这样,包含PlayableDirector的结构图就变成下图所示:

包含PlayableDirector的TimelineAsset结构图

PlayableAsset UML类图

TrackAssetTimelineAsset 其实都是继承自PlayableAsset,是一种特殊的PlayableAsset

PlayableAsset UML类图如下图所示:

  • TimelineAsset:最特别的PlayableAsset,存储了所有trackAsset,包含一个CreatePlayable方法,指导运行时创建TimelinePlayable
  • ClipPlayableAsset(蓝色) :表示实现ITimelineClipAsset接口的特殊PlayableAsset,具体类有ActivationPlayableAssetAudioPlayableAssetAnimationPlayableAssetControlPlayableAsset。这些PlayableAsset拥有一个clipCaps属性,表明这个片段在Timeline窗口拥有的能力,这些能力包含:
    • Looping 循环
    • Extrapolation 外推断,分Pre和post,表示两个clip中间空白区域的播放逻辑:
      • none 保持为开始帧
      • hold 保持为最后一帧
      • loop 循环(跳帧循环)
      • pingpong 镜像循环
      • continue 根据动画源文件的loop决定是连续循环还是保持为最后一帧
    • ClipIn 起始裁切
    • SpeedMultiplier 倍速
    • blend 混合
  • PlayableAsset都包含一个CreatePlayable方法,用于运行时创建对应的Playable。
  • TrackAsset(左下黄色) 拥有CreateTrackMixer方法,运行时也是创建Playable(重写CreateTrackMixer方法的话可以创建自定义MixerPlayable),可以接收多个input输入。
  • TrackAssetCompileClips方法在运行时编译其所包含的所有clip,生成RuntimeClip并加入到TimelinePlayableIntervalTree中,用于Timeline运行时标识哪个clip被激活。
  • 继承TrackAsset的类有GroupTrack、ActivationTrack、AudioTrack、ControlTrack、SignalTrack、AnimationTrack等,这与timeline窗口能添加的track一致。
  • TrackAsset 有两个特性(Attribute
    • TrackClipType:表明Track能添加的clip类型,也就是上面继承playable且实现ITimelineClipAsset接口的类。
    • TrackBindingType :表明 output Track对应的PlayableOutputtarget参数类型,也即PlayableBindingoutputTargetType参数。
[TrackClipType(typeof(AnimationPlayableAsset)]
[TrackBindingType(typeof(Animator))]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值