[unity]TimeLine自定义脚本(自己复习用)

前几天在Unity官方学了学,如何使用Timeline以及cinemachine的方法, 学习了如何写自定义脚本,模仿着做一下,写一篇笔记来巩固一下,希望以后复习的时候不会忘记。

https://www.bilibili.com/video/BV1EK4y177c9?t=2029 //观看的视频,UP主讲的超级好

一开始我们先看看原本的Timeline里的各个轨道
Activation Track(控制物体的显示和隐藏)
Animation Track(为物体加入动画,可以在场景中方便地录制动画,也可以是已经制作好的Animation Clip)
Audio Track(为动画添加音效,并可对音效进行简单的裁剪和操作)
Control Track(在该轨道上可以添加粒子效果,同时也可以添加子Timeline进行嵌套)
Playable Track(在该轨道中用户可以添加自定义的播放功能)
Track Group(将不同的轨道进行分类,相当于文件夹功能)

当然,要实现更加天马星空的想法,需要我们来自定义脚本

我们要明白Timeline里面的四个要素
分别为
Track 轨道部分
Clip 轨道上面的片段部分
Behavior 片段的行为?貌似也可以交Data
Mixed 关于片段直接混合的部分

首先是关于Track部分:

using UnityEngine.Timeline;
//此标签能让轨道绑定某个物体,如果在动画中要调用多个物体的时候,感觉一般会在behavior中去调用别的的
[TrackBindingType(typeof(GameObject))]
//标签决定轨道的颜色
[TrackColor(230 / 255f, 230 / 255f, 0 / 255f)]
//标签决定轨道能够连接的clip,我的理解为是Track和clip之间的绑定,我们只要写要在这个Track上播放的clip就好了
[TrackClipType(typeof(DialogueClip))]

//这里的继承,为TrackAsset
public class DialogueTrack : TrackAsset
{
}

然后是Clip的部分,代码如下

//这里继承的为PlayableAsset部分,因此命名空间改为Playables
using UnityEngine.Playables;
//继承PlayableAsset
public class DialogueClip : PlayableAsset
{
//PlayableAsset为抽象类,先实现其一个方法CreatePlayable,在其中通过ScriptPlayable方法的一个重写来绑定自己定义的Behavior
//(当时写的时候太快写成了Behabior了哈哈哈哈)
//如果不用template传回来好像会出现在clip上面无法显示的问题
public DialogueBehabior template = new DialogueBehabior();
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        var playable = ScriptPlayable<DialogueBehabior>.Create(graph,template);
        return playable;
    }
}

然后是Behavior的部分

//同样我们使用这个命名空间
using UnityEngine.Playables;
//序列化,才能够在Timeline窗口上找到各个参数
[System.Serializable]
//继承于PlayableBehaviour
public class DialogueBehabior : PlayableBehaviour
{
//在这里中可以去自定义各种各样天马星空的想法,包括各种UI或者灯光,粒子特效等等
//不过要先定义一个PlayableDirector类(一个类似于导演的类,控制的动画的各种各样)
private PlayableDirector playableDirector;
//在这个类中,有3个比较重要的方法

//在创建的时候调用
public override void OnPlayableCreate(Playable playable)
    {
    //此时,给“导演”赋值,可以类比于实例化吗?别人通过调用这个来控制自己的动画
        playableDirector = playable.GetGraph().GetResolver() as PlayableDirector;
    }
//每次更新的时候都会调用这个函数
public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
    }
//在动画播放结束的时候调用这个函数
public override void OnBehaviourPause(Playable playable, FrameData info)
    {
    }
}

在Timeline中还有一个signal,可以用来在某一刻调用外部的某些方法,非常的方便好用QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值