UnityTimeline

image.png

Activation Track(对象激活与隐藏轨道)

Animation Track(动画轨道)

Audio Track(声音轨道)

Signal Track(信号轨道)

Signal包含三部分:Signal Asset(信号资源),Signal Emitter(信号发射器)和SignalReceiver(信号接收器),它其实就是一个Event,作用就是在单独轨道上面添加事件点,在某一帧执行某个方法
——创建信号发射器和信号资源
在轨道上右键选择Add Signal Emitter,Inspector面板选择从Project面板创建的Signal Asset或Create一个新的Signal Asset
——创建信号接收器

public class CustomSignalReceiver : MonoBehaviour, INotificationReceiver
{
    public void OnNotify(Playable origin, INotification notification, object context)
    {
        var signal = notification as CustomSignal;
        if (signal != null
            && signal.asset != null)
        {
            Debug.Log(signal.param);
        }
    }
}
 
public class CustomSignal : SignalEmitter
{
    public int param;
}
image.png

自定义Timeline

Timeline分为以下四部分

——Track:轨道,继承自PlayableTrack:TrackAsset
[TrackColor(255f/255f,255f/255f,100f/255f)]
[TrackClipType(typeof(PlayableAsset))]
[TrackClipType(typeof(UnityEngine.Timeline.TimelineClip))]
[TrackBindingType(typeof(Transform))]
public class TransformTrack : TrackAsset
{
    public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
    {
        return ScriptPlayable<TransformMixerBehaviour>.Create(graph, inputCount);
    }
}
——Clip:片段,一段Clip代表一个Playable,继承自PlayableAsset和ITimelineClipAsset
public class TransformClip : PlayableAsset,ITimelineClipAsset
{
    private TransformBehaviour template = new TransformBehaviour();
    // ExposedReference暴露引用才可以赋值
    public ExposedReference<Transform>  endLocation;
    public float moveSpeed;
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        template.endLocation = endLocation.Resolve(graph.GetResolver());
        template.moveSpeed = moveSpeed;

        Playable playable = ScriptPlayable<TransformBehaviour>.Create(graph,template);

        return playable;
    }

    public ClipCaps clipCaps =>  ClipCaps.None;
}
——Behavior、属于行为逻辑模板,继承自PlayableBehaviour
public class TransformBehaviour : PlayableBehaviour
{
    public Transform endLocation;
    public float moveSpeed;
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        Transform actor = playerData as Transform;
        actor.position = Vector3.Lerp(actor.position, endLocation.position, info.deltaTime * moveSpeed);
    }
}
——Mixer:属于混合行为,继承自PlayableBehaviour,贯穿整个轨道(主要通过GetInputWeight权重进行混合,TrackAsset类复写CreateTrackMixer()后创建混合器Behavior)
public class TransformMixerBehaviour : PlayableBehaviour
{
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        Transform transform = playerData as Transform;

        int inputCount = playable.GetInputCount();
        for (int i = 0; i < inputCount; i++)
        {
            var weight = playable.GetInputWeight(i);
        }
    }
}
image.png

image.png

自定义行为逻辑,基类有一套自己的生命周期
OnPlayableCreate:每个Clip创建时( Playable播放状态为playing时),相当于Awake
OnGraphStart:每个Clip创建时( Playable播放状态为playing时),在OnPlayableCreate后执行,相当于Start
OnBehaviourPlay:Clip执行时
OnBehaviourPause:Clip暂停时
PrepareFrame:每帧执行,相当于Update,playerData就是轨道绑定的物体,默认是PlayableDirector组件挂载的物体
OnGraphStop:Playable停止时
OnPlayableDestroy:Playable销毁时


——TrackColor特性:控制轨道颜色
——TrackClipType特性:可以添加的Clip类型
——TrackBindingType特性:绑定的数据对象,在ProcessFrame函数中会以playerData的形式传递进去
——OnCreateClip:面板上创建Clip时
——CreateTrackMixer:创建自定义混合轨道
——GetClips:获取轨道内的所有ClipAsset

插件:Default Playables(Timeline Playable Wizard)可以快速创建几个文件

https://assetstore.unity.com/packages/tools/default-playables-95266

Timeline图像化插件Graph-visualizer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。