如何在 Timeline 中创建自定义轨道? - V2EX
UNITY: Game Development Tool
License Comparisons
unn
V2EX    UNITY

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

  •  
  •   unn Jan 21, 2020 3022 views
    This topic created in 2307 days ago, the information mentioned may be changed or developed.

    本文转自 Unity Connect 博主 大智

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

    用过一段时间 Timeline 后,我问大智:“Timeline 中只有这么几个轨道么?我发现有的需求这些轨道根本没办法满足,使用之前学过的 Playable Track 也很麻烦,还有其他办法么?” 大智:“你遇到了什么问题呢?” 小新:“之前咱们学的那个 Playable 轨道其中一个问题是:每次添加自定义 clip 时,都需要给它指定 Light 组件,如果 Clip 很多,会非常麻烦。” 大智:“这个还好,不算个大问题,多选就能一次搞定。不过你可能更需要的是自定义轨道。使用自定义轨道有几个好处:

    可以发挥你的脑洞,用代码实现出无限的可能 可以解决轨道的绑定(如下图中的 Bound object )问题,只需要绑定一次,轨道上的所有 Clip 都可以访问。比如 Animation Track、Activation Track 都是这样的。 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;</light>

    public override Playable CreatePlayable (PlayableGraph graph, GameObject owner) { var playable = ScriptPlayable<lightcontrolbehaviour>.Create(graph);</lightcontrolbehaviour>

     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 了。</light>

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

    原文链接: https://connect.unity.com/p/ru-he-zai-timelinezhong-chuang-jian-zi-ding-yi-gui-dao?app=true 更多 Unity 精彩内容,请戳上方链接,下载 Unity 官方 app,在线讨论,技术答疑,干货满满!

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     2786 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 01:55 PVG 09:55 LAX 18:55 JFK 21:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86