你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。

用过一段时间Timeline后,我问大智:“Timeline中只有这么几个轨道么?我发现有的需求这些轨道根本没办法满足,使用之前学过的Playable Track也很麻烦,还有其他办法么?”

大智:“你遇到了什么问题呢?”

小新:“之前咱们学的那个Playable轨道其中一个问题是:每次添加自定义clip时,都需要给它指定Light组件,如果Clip很多,会非常麻烦。”

大智:“这个还好,不算个大问题,多选就能一次搞定。不过你可能更需要的是自定义轨道。使用自定义轨道有几个好处:”
1、可以发挥你的脑洞,用代码实现出无限的可能
2、可以解决轨道的绑定(如下图中的Bound object)问题,只需要绑定一次,轨道上的所有Clip都可以访问。比如Animation 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对象。

在Timeline中添加

现在就可以在Timeline中直接添加Light Control Track了。

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

就可以像内置的Track一样使用啦!

总结

自定义轨道可以支持你任意发挥,甚至可以让Timeline变成一个非线性运行,可交互的序列动画,是不是又勾起了你的兴趣?那就快来跟我小新一起来吧。

【扩展学习】在洪流学堂公众号回复timeline可以下载Timeline&Cinemachine系列教程全文带目录PDF


好了,今天就就让小新絮絮叨叨到这里了。没讲清楚的地方欢迎评论,不点赞收藏我可能不会回复你的哦(¬、¬) (¬_¬)

我是大智,你的技术探路者,下次见!

别走!点赞收藏哦!

好,你可以走了。

如何在Timeline中创建自定义轨道?相关推荐

  1. 如何在android中创建自定义对话框?

    本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...

  2. hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...

    如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...

  3. 如何在WordPress中创建自定义主页

    Often users ask us if it's possible to create a custom homepage in WordPress. 用户经常问我们是否可以在WordPress中 ...

  4. wordpress 古腾堡_如何在WordPress中创建自定义古腾堡块(简便方法)

    wordpress 古腾堡 Do you want to create a custom Gutenberg block for your WordPress site? After the Word ...

  5. 如何在PowerPoint中创建自定义模板

    PowerPoint provides extremely useful resources called templates that automatically construct the fou ...

  6. 如何在Outlook中创建自定义导航窗格

    Outlook's navigation pane lets you navigate to different folders, mailboxes, and groups. However, it ...

  7. appender log4j 扩展_java-如何在log4j2中创建自定义Appender?

    在log4j2中,其工作原理与在log4j-1.2中完全不同. 在log4j2中,您将为此创建一个插件. 该手册在此处提供了自定义附加程序示例的说明:[http://logging.apache.or ...

  8. 如何在ASP.NET Core中创建自定义AuthorizeAttribute?

    本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...

  9. 在OpenCart中创建自定义送货方式:第一部分

    尽管OpenCart核心本身提供了许多有用的运送方法,但始终有机会需要创建自己的运送方法. 另一方面,作为一名Web开发人员,您将始终尝试探索自己选择的框架,以了解如何创建自己的自定义内容! 在本系列 ...

最新文章

  1. “惊群”,看看nginx是怎么解决它的
  2. 安卓高手之路之 ClassLoader
  3. 22个激活函数,ReLU、RReLU、LeakyReLU、PReLU、Sofplus、ELU、CELU、SELU、GELU、ReLU6、Sigmoid、Tanh、Softsign、Hardtanh等
  4. Python小知识 | 这些技能你不会?(二)
  5. 【转】 ids for this class must be manually assigned before calling save()
  6. eclipse导出war包放入服务器中
  7. WPF 播放Flash
  8. mysql高性能sql引擎剖析_Oracle+高性能SQL引擎剖析:SQL优化与调优机制详解-笔记之执行计划(一)...
  9. Unity后期处理插件:PostProcessing
  10. 一键清理垃圾的bat文件
  11. GD32F103VET6替代STM32F103VET6遇到的问题
  12. Java日期格式化YYYYMMdd与yyyyMMdd的区别
  13. windows 启动修复总结
  14. 烽火2640路由器命令行手册-04-网络协议配置命令
  15. “历史的教训”之软件测试
  16. 推荐一款好用的CopyTranslator 翻译工具
  17. dubbo整体设计整理
  18. php常见后门,php后门隐藏技巧大全
  19. 通达信资金净流入公式_通达信资金净入净出指标公式
  20. 无人驾驶与室内移动机器人对比思考

热门文章

  1. Google Test(Primer)(三)——断言
  2. 为什么资源文件名以类型开头
  3. mysql操作json优点和缺点_详解Mysql中的JSON系列操作函数
  4. python输出时间格式_python中日期和时间格式化输出的方法小结_python
  5. sklearn gridsearchcv_Sklearn与Tensorflow的完美结合
  6. 64位树莓派运行linux,树莓派3B+安装64位debian GUN/Linux系统
  7. 话唠黄金机器人_用了接吻教学机器人以后......哈哈哈哈不能我一个人瞎!
  8. com 组件调用不起来_Spring Cloud Alibaba,分布式服务调用(四)
  9. 壁纸控:小清新桌面壁纸
  10. 版式之美!左右布局图文排版设计灵感