Notifications
Article
[原创] Timeline绑定SourceObject 方式
Published a month ago
93
0
--- 转自UniteLee发表于Unity中国论坛
讨论背景
讨论该问题是为了解决在场景中不要放置太多Timeline,甚至说最好不要放,因为场景中有Timeline无论是你在开发打开场景还是发布后加载,都会很卡,超级卡。但是我们又发现,我们在场景中编辑好Timeline的轨道后,将Timeline的随意拖到场景中的Director上,SourceObject全部丢失了。根本原因就是Unity分了场景数据和资源数据,两者之间没有直接的联系。
以下假设我们需要用到2个Timeline。
1、在场景中创建2个对象,分别叫A B,在2个对象上分别添加PlayableDirector组件
2、创建2个Timeline绑定到A、B,分别叫Ta、Tb;
3、分别绑定好轨道对象
以上做完,播放是正常的,想播放哪个就播放哪个,但是在场景中加了两个Timeline,场景开始卡了,这里是2个,万一需要几百个呢?。因此使用下面三种方式进行实现。

### **方式一** ###
实现方式:为了不让场景卡顿,我们可以先将A、B中的Ta Tb去掉,用的时候才绑定上去,但是只能Ta绑定到A上,轨道的SourceObject才能和场景中的自动识别绑定上。这样是可以的。
缺点:场景中还是有多个Director,场景中的某些模型只在A中使用,当播放B时,还需要去创建ActivateTrack去隐藏,比较麻烦。

### **方式二** ###
实现方式:编辑好Timeline后,我们在场景中只放一个Director,并且Timeline资源是空的,我们想播放哪个Timeline在给它赋值上去,但是轨道上的SourceObject全部丢失,只能写代码来绑定,并且在之前你必须将场景中的对象标识好,查找后绑定到Timeline上。
缺点:添加标识和绑定比较麻烦,如果轨道片段上也需要绑定变得更复杂,建议不这样做。

### **方式三** ###
使用预制体保存轨道对象
假设A中我们有三个轨道需要绑定对象分别未 go1 go2 go3,我们将go1 go2 go3 全部拖到A下面作为它的子级,然后将A拖到场景中。要播放只需要实例化出来即可。这样A B就完全没有关系,绑定对象也不会出现交互。强烈建议的方式。

Tags:
Jason Li
Producer
11
Comments