三大继承类
(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。?
?
?控制台打印如下:
|