Unity Timeline自定义轨道

三大继承类

(1)PlayableTrack  自定义轨道
(2)PlayableBehavior Playable行为控制
(3)PlayableAsset Playable数据来源

首先创建一个自定义逻辑类:

using UnityEngine;

public class SayHello : MonoBehaviour
{
    public string TextContent;
    

    // Update is called once per frame
    void Update()
    {
        Debug.Log(TextContent);
    }
}

PlayableTrack 自定义轨道

using UnityEngine;
using UnityEngine.Timeline;

[TrackBindingType(typeof(MonoBehaviour))]
[TrackClipType(typeof(TextPlayableAsset))]
public class CustomTrack : PlayableTrack {
}

TrackBingdingType限定了它能控制得类型,TrackClipType限定了Playable数据来源的类型,在轨道中采样的数据从哪里获取得到。

PlayableBehavior Playable行为控制

using UnityEngine.Playables;

// A behaviour that is attached to a playable
public class TextBehaviour : PlayableBehaviour
{
    public string Content;

    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        //通过下面的这句代码,即可在绑定过对象的轨道上进行传递参数的操作。playData就是我们放在轨道上面自定义的Asset。
        SayHello sayHello = playerData as SayHello;
        if (sayHello != null)
        { 
            //对轨道绑定的对象进行值的传递。
            sayHello.TextContent = Content;
        }
    }
}

主要处理跟具体逻辑控制相关的代码,可以看到在这个类中,获取到当前物体上挂在的SayHello脚本,再对它的TextContent字段进行赋值。

PlayableAsset Playable数据来源

using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class TextPlayableAsset : PlayableAsset
{
    public string TextContent;

    // Factory method that generates a playable based on this asset
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
//通过下面的两行代码进行创建一个新的Playable(Script类型),然后通过GetBehavior来访问刚刚创建的
        var scriptPlayable = ScriptPlayable<TextBehaviour>.Create(graph);
//上方create实际接受两个参数,第一个参数是graph,第二个参数是我们创建的这个Playable接受几个输入,默认不填写那么就是0个输入。
        var scriptBehavior = scriptPlayable.GetBehaviour();
        scriptBehavior.Content = TextContent;
//返回刚刚创建出来的Playable,Unity会帮助我们自动的连线。
        return scriptPlayable;
    }
}

在这个类中,通过获取TextBehaviour脚本,然后完成对这个脚本中的数据的赋值,数据来源就保存在这个自定义的Asset中。

可以看到,通过Timeline添加自定义的轨道控制相关,可以达到自定义的逻辑控制的目的。

两个Asset数据定义分别为test1、test2。 

 

 控制台打印如下:

Guess you like

Origin blog.csdn.net/dmk17771552304/article/details/121472186