赞
踩
playableAPI推出后,一直没有起色,记得当初Unity大会上,说是为了解放unity的动画系统,因为其操作之复杂枯燥,本应该美术同学的工作要强加给技术,所以当时果断放弃了。但是TimeLine的崛起,又回到我的面前。
上面我们能看到的只要三个,还有一个混合器是我们看不到的,他也是timeLine的核心部分,他控制着片段之间的混合数据,以及timeline中计算好的数据应用到绑定物体上。
由上图可以出来Track和Clip(以下称呼为ClipAsset),都是一种资源。而Mixer和ClipPlayable是行为逻辑。
以上函数是PlayableBehaviour的周期函数,以上说了调用时机和一些启动的函数。另外PlayState标识当前的状态,我们也可以通过GetPlayState(U playable) SetPlayState(U playable) 进行设置。注意两个概念:PlayableGraph和Playable。如果不懂的可以看看PlayableAPI或者直接记住用法即可。
和Mixer大体相似,只不过一些函数的执行时机不同。除了OnGraphStart和OnGraphStop这两个和PlayableGraph直接相关的一致外,其他的函数都是在当前Clip执行期间执行。
大部分情况下,我们自定义的都是类似于1,2(从左到右)两种Mixer的情况。对于特殊的或者复杂的需求我们可以使用PlayableAPI,自定义链接,实现3的树结构。
面板结构如图,我们将其分为6个区域:
上图中s表示以秒为单位,f表示以帧为单位。
ClipCaps | 拥有部分 |
---|---|
All | 1,2,3,4,5,6 |
None | 1 |
Looping | 1 |
Extrapolation | 1,5 |
ClipIn | 1,3 |
SpeedMultiplier | 1,4 |
Blending | 1,6 |
对于ClipAsset只需要实现ITimelineClipAsset接口,返回对应类型即可。真正的数据操作是在TimelineClip中进行。
前面说了四大天王,这里终于到了统领将军的时候了。
Playable我们编辑的Timeline的资源。
UpdateMode
a.DSP Clock:没用过,说了混音器的时间参数。总之不会用。
b.GameTime:Unity的Time.DeltaTime(受TimeScale影响)
c.Unscaled Game Time:Unity中Time.unscaledDeltaTime
d.Manual:自定义的更新模式,需要我们设置时间,并且调用Evaluate(),大概是这样子:
playableDirector.time += Time.deltaTime;//我们自定义的时间即可
playableDirector.Evaluate();
PlayOnAwake 是否在Awake时就开始播放。理解为是否在激活时直接播放。
WrapMode 当一次播放完毕后的行为,简称重复模式:
a. Hold:保持在结束后的最后一帧。
b. Loop:循环播放,结束后重头再来
c. None:结束后继续往后走,所以如何播放取决于如果最后一个片段的AnimationExtrapolation(啥?不知道是啥?看上面的ClipCaps啊~)
Initial Time 播放时,跳过的时间。如果上面的WrapMode是Loop则循环时此数据无效。
Bindings 每个轨道的名称,绑定的物体(其实就是输出给谁)
功能 | 函数名 | 备注 |
---|---|---|
开始 | Play() | 还有两个重载,回调 Action<PlayableDirector> played |
暂停 | Pause() | 回调Action<PlayableDirector> paused |
继续 | Resume() | |
停止 | Stop() | 回调Action<PlayableDirector> stopped |
评估 | Evaluate() | 自定义UpdateMode使用 |
延迟评估 | DeferredEvaluate() | 在下一帧生效 |
设置Binding | SetGenericBinding(Object key, Object value) | |
获取Binding | Object GetGenericBinding(Object key) | |
清除Binding | ClearGenericBinding(Object key) | |
设置引用数据 | SetReferenceValue(PropertyName id, Object value) | |
获取引用数据 | Object GetReferenceValue(PropertyName id, out bool idValid) | |
清除引用数据 | ClearReferenceValue(PropertyName id) | |
Graph | playableGraph { get; } | |
PlayableAsset | playableAsset { get; set; } | |
重构Graph | RebuildGraph() | |
重构输出 | RebindPlayableGraphOutputs() | 设置或更改binding后调用下。 |
想对TimeLine的结构做个分析,有时间在做吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。