如何在Timeline中创建自定义轨道?
你好,我是跟着大智学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中创建自定义轨道?相关推荐
- 如何在android中创建自定义对话框?
本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...
- hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...
如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...
- 如何在WordPress中创建自定义主页
Often users ask us if it's possible to create a custom homepage in WordPress. 用户经常问我们是否可以在WordPress中 ...
- wordpress 古腾堡_如何在WordPress中创建自定义古腾堡块(简便方法)
wordpress 古腾堡 Do you want to create a custom Gutenberg block for your WordPress site? After the Word ...
- 如何在PowerPoint中创建自定义模板
PowerPoint provides extremely useful resources called templates that automatically construct the fou ...
- 如何在Outlook中创建自定义导航窗格
Outlook's navigation pane lets you navigate to different folders, mailboxes, and groups. However, it ...
- appender log4j 扩展_java-如何在log4j2中创建自定义Appender?
在log4j2中,其工作原理与在log4j-1.2中完全不同. 在log4j2中,您将为此创建一个插件. 该手册在此处提供了自定义附加程序示例的说明:[http://logging.apache.or ...
- 如何在ASP.NET Core中创建自定义AuthorizeAttribute?
本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...
- 在OpenCart中创建自定义送货方式:第一部分
尽管OpenCart核心本身提供了许多有用的运送方法,但始终有机会需要创建自己的运送方法. 另一方面,作为一名Web开发人员,您将始终尝试探索自己选择的框架,以了解如何创建自己的自定义内容! 在本系列 ...
最新文章
- “惊群”,看看nginx是怎么解决它的
- 安卓高手之路之 ClassLoader
- 22个激活函数,ReLU、RReLU、LeakyReLU、PReLU、Sofplus、ELU、CELU、SELU、GELU、ReLU6、Sigmoid、Tanh、Softsign、Hardtanh等
- Python小知识 | 这些技能你不会?(二)
- 【转】 ids for this class must be manually assigned before calling save()
- eclipse导出war包放入服务器中
- WPF 播放Flash
- mysql高性能sql引擎剖析_Oracle+高性能SQL引擎剖析:SQL优化与调优机制详解-笔记之执行计划(一)...
- Unity后期处理插件:PostProcessing
- 一键清理垃圾的bat文件
- GD32F103VET6替代STM32F103VET6遇到的问题
- Java日期格式化YYYYMMdd与yyyyMMdd的区别
- windows 启动修复总结
- 烽火2640路由器命令行手册-04-网络协议配置命令
- “历史的教训”之软件测试
- 推荐一款好用的CopyTranslator 翻译工具
- dubbo整体设计整理
- php常见后门,php后门隐藏技巧大全
- 通达信资金净流入公式_通达信资金净入净出指标公式
- 无人驾驶与室内移动机器人对比思考
热门文章
- Google Test(Primer)(三)——断言
- 为什么资源文件名以类型开头
- mysql操作json优点和缺点_详解Mysql中的JSON系列操作函数
- python输出时间格式_python中日期和时间格式化输出的方法小结_python
- sklearn gridsearchcv_Sklearn与Tensorflow的完美结合
- 64位树莓派运行linux,树莓派3B+安装64位debian GUN/Linux系统
- 话唠黄金机器人_用了接吻教学机器人以后......哈哈哈哈不能我一个人瞎!
- com 组件调用不起来_Spring Cloud Alibaba,分布式服务调用(四)
- 壁纸控:小清新桌面壁纸
- 版式之美!左右布局图文排版设计灵感