找回密码
 注册帐号

扫一扫,访问微社区

自学总结 如何在Timeline中创建自定义轨道?

1
回复
804
查看
[ 复制链接 ]
3偶尔光临
259/300

89

主题

95

帖子

259

积分

Rank: 3Rank: 3Rank: 3

UID
24181
好友
1
蛮牛币
695
威望
0
注册时间
2014-5-7
在线时间
85 小时
最后登录
2020-1-26
2020-1-19 15:18:10 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。
用过一段时间Timeline后,我问大智:“Timeline中只有这么几个轨道么?我发现有的需求这些轨道根本没办法满足,使用之前学过的Playable Track也很麻烦,还有其他办法么?”
大智:“你遇到了什么问题呢?”
小新:“之前咱们学的那个Playable轨道其中一个问题是:每次添加自定义clip时,都需要给它指定Light组件,如果Clip很多,会非常麻烦。”
大智:“这个还好,不算个大问题,多选就能一次搞定。不过你可能更需要的是自定义轨道。使用自定义轨道有几个好处:”
1、可以发挥你的脑洞,用代码实现出无限的可能
2、可以解决轨道的绑定(如下图中的Bound object)问题,只需要绑定一次,轨道上的所有Clip都可以访问。比如 Track、Activation Track都是这样的。
3、Playable Track上如果混用很多类型的Clip时,最后会很混乱,也不直观。自定义轨道可以直观地将不同用途的轨道区分开。
轨道的结构图

那我们来看看如何把之前学习Playable轨道时的自定义Light Clip改成自定义轨道,然后绑定Light组件。
注意下面是基于之前的Playable轨道这一节学习的,如果还没学习,建议先去学习Playable轨道
自定义轨道
首先需要创建一个自定义轨道的脚本,继承TrackAsset:
using UnityEngine;using UnityEngine.Timeline;[TrackClipType(typeof(LightControlAsset))][TrackBindingType(typeof(Light))]public class LightControlTrack : TrackAsset {}
这段代码用了两个Attribute:
  • TrackClipType指定了轨道接收的PlayableAsset类型;
  • TrackBindingType指定了轨道要求绑定的对象类型。
现在还需要修改PlayableAsset和PlayableBehaviour,也就是之前的LightControlAsset和LightControlBehaviour。
LightControlBehaviour的代码如下:
using UnityEngine;using UnityEngine.Playables;public class LightControlBehaviour : PlayableBehaviour{   //public Light light = null; 不再需要它了   public Color color = Color.white;   public float intensity = 1f;   public override void ProcessFrame(Playable playable, FrameData info, object playerData)   {       Light light = playerData as Light; // 这个地方有变化       if (light != null)       {           light.color = color;           light.intensity = intensity;       }   }}
PlayableBehaviour中就不再需要Light成员变量了,因为可以从方法的playerData中获取到,转换成对应的类型即可。
using UnityEngine;using UnityEngine.Playables;public class LightControlAsset : PlayableAsset{   //public ExposedReference<Light> light; 不需要它了   public Color color = Color.white;   public float intensity = 1f;   public override Playable CreatePlayable (PlayableGraph graph, GameObject owner)   {       var playable = ScriptPlayable<LightControlBehaviour>.Create(graph);       var lightControlBehaviour = playable.GetBehaviour();       //lightControlBehaviour.light = light.Resolve(graph.GetResolver());       lightControlBehaviour.color = color;       lightControlBehaviour.intensity = intensity;       return playable;      }}
PlayableAsset中也不需要再保留ExposedReference<Light>了,轨道会直接提供这个Light对象。
在Timeline中添加
现在就可以在Timeline中直接添加Light Control Track了。

添加Track后,需要设置绑定的对象。这样每个Clip都可以获取到这个绑定的对象。

就可以像内置的Track一样使用啦!
总结
自定义轨道可以支持你任意发挥,甚至可以让Timeline变成一个非线性运行,可交互的序列动画,是不是又勾起了你的兴趣?那就快来跟我小新一起来吧。
【扩展学习】对Timeline&Cinemachine感兴趣的童鞋:更多教程在洪流学堂公众号回复timeline获取,免费获取图文手册,更有视频教程。

好了,今天就就让小新絮絮叨叨到这里了。没讲清楚的地方欢迎评论,不点赞、收藏我可能不会回复你的哦(¬、¬) (¬_¬)
我是大智,你的技术探路者,下次见!
别走!点赞,收藏哦!
好,你可以走了。

回复

使用道具 举报

排名
64942
昨日变化

0

主题

12

帖子

44

积分

Rank: 1

UID
44241
好友
0
蛮牛币
36
威望
0
注册时间
2014-9-10
在线时间
30 小时
最后登录
2020-6-2
6 天前 显示全部楼层
不错不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则