UnityTimeline

作者: 好怕怕 | 来源:发表于2023-03-23 21:39 被阅读0次
    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

    相关文章

      网友评论

        本文标题:UnityTimeline

        本文链接:https://www.haomeiwen.com/subject/bxtwrdtx.html