0评论

Unity TimeLine扩展

文章来自CSDN博客 2018-10-26 57浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏开发行业精英群711501594

这篇内容给大家介绍下TimeLine的扩展使用,例如说想在TimeLine中右键添加自定义的Track,具体的步骤如下:

1、创建一个继承于TrackAsset的脚本
using UnityEngine;
using UnityEngine.Timeline;
[TrackColor(0.855f, 0.903f, 0.87f)]
// 添加的具体资源类型
[TrackClipType(typeof(NewPlayableAsset))]
// 绑定指定类型
//[TrackBindingType(typeof(GameObject))]
public class CustomTrack : TrackAsset {
}

2、创建PlayableAsset类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
[System.Serializable]
public class NewPlayableAsset : PlayableAsset,ITimelineClipAsset
{
    public ExposedReference<GameObject> obj;
    // 使其暴露在面板中,但是该类需要序列化
    public NewPlayableBehaviour np = new NewPlayableBehaviour();
    public ClipCaps clipCaps
    {
        get { return ClipCaps.None; }
    }
    // Factory method that generates a playable based on this asset
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go) {
        np.Obj = obj.Resolve(graph.GetResolver());
        return ScriptPlayable<NewPlayableBehaviour>.Create(graph, np);
        //return Playable.Create(graph);
    }
}

3、具体功能的实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
using System;
// 如果不序列化,在面板中没办法看到参数接口
[Serializable]
public class NewPlayableBehaviour : PlayableBehaviour
{
    private GameObject obj;
    public string str;
    public GameObject Obj
    {
        get
        {
            return obj;
        }
        set
        {
            obj = value;
        }
    }
    // Called when the owning graph starts playing
    public override void OnGraphStart(Playable playable) {
    }
    // Called when the owning graph stops playing
    public override void OnGraphStop(Playable playable) {
    }
    // Called when the state of the playable is set to Play
    public override void OnBehaviourPlay(Playable playable, FrameData info) {
    }
    // Called when the state of the playable is set to Paused
    public override void OnBehaviourPause(Playable playable, FrameData info) {
    }
    // Called each frame while the state is set to Play
    public override void PrepareFrame(Playable playable, FrameData info) {
        Debug.Log(Obj.name);
    }
}