当前位置:   article > 正文

Unity之Timeline教程_unity timeline

unity timeline

前言

Unity Timeline是Unity的一种时间轴编辑器工具,用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面,使得开发者可以通过拖放操作轻松创建和编辑时间轴。
在这里插入图片描述

Timeline的使用

  1. 创建新的Timeline
    在Unity中,选择菜单栏的 Window -> Sequencing -> Timeline 打开Timeline窗口。
    在Hierarchy视图中右键,选择 Create -> Timeline 创建一个新的Timeline对象。

  2. 时间轴基础操作
    添加轨道 (Tracks):在Timeline窗口中右键空白处,选择 Add Tracks,可以添加诸如动画、音频、事件等各种轨道。
    添加关键帧 (Keyframe):在轨道上右键,选择 Add Key,用于设置轨道上物体的不同状态。
    调整时间范围:可以在时间轴的上方调整整个Timeline的时间范围,也可以在轨道上调整各个轨道的时间范围。
    在这里插入图片描述

轨道介绍

Activation Track:用于控制物体的激活状态。可以在轨道上添加关键帧,控制物体的激活和非激活状态。
Animation Track:用于处理物体的动画。可以在此轨道上添加关键帧,编辑物体的动画状态。
Audio Track:用于处理场景中的音频。可以管理音频的播放、暂停、淡入淡出等操作。
Control Track:用于控制在时间轴上放置Prefab,并由Timeline管理Prefab对象的创建与销毁(即,生命周期)。
Playable Track:用于嵌套其他Timeline。可以在此轨道上添加其他Timeline,实现Timeline的嵌套播放。
Signal Track:用于触发自定义的事件。可以在轨道上添加关键帧,触发事件。

自定义轨道

Unity中的TimeLine支持自定义轨道,一般需要新建三个(若需要处理混合则为四个)类。
一、Track
1、用途
首先需要定义一个轨道类,继承TrackAsset,它代表了时间轴内的轨道。官方API

2、代码示例

[TrackColor(0.055f, 0.03f, 0.387f)]
[TrackClipType(typeof(MyClip))]
[TrackBindingType(typeof(Animator))]
public class MyTrack : TrackAsset
{
    [SerializeField] int blendingDuration = 200;
    protected override Playable CreatePlayable(PlayableGraph graph, GameObject gameObject, TimelineClip clip)
    {
        var asset = clip.asset as MyClip;
        asset.duration = blendingDuration;
        return base.CreatePlayable(graph, gameObject, clip);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、轨道类可以被三种特性标签修饰
[TrackColor(float r, float g, float b)]用于定义轨道的颜色,方便不同轨道之间的区分;
[TrackClipType(Type clipClass)]用于指定在轨道中可创建的PlayableAsset类型,可以理解实现了轨道类型和片段类型之间的绑定,同一个轨道可以添加多种不同的片段类型,及可以有多个TrackClipType修饰同一个轨道类;
[TrackBindingType(Type type)]用于指定轨道需要绑定到的对象类型,如示例中的LookAtTrack是用于控制某个角色上的头部动画,因此需要绑定一个角色的Animator组件。若改轨道不需要绑定特定对象,则不需要添加该标签。

4、常用方法

protected override Playable CreatePlayable(PlayableGraph graph, GameObject gameObject, TimelineClip clip)
protected override void OnCreateClip(TimelineClip clip) 在新建片段时调用用于设置Clip的默认值。
public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)当片段之间支持混合时可添加该方法。
  • 1
  • 2
  • 3

二、Asset
1、用途
接着定义一个继承PlayableAsset、实现接口ITimelineClipAsset的类,用于表示片段资源,该类中可以定义片段包含的字段,这些字段会暴露到Inspector中。

2、代码示例

public class MyClip : PlayableAsset, ITimelineClipAsset
{
	public string content;
	public ExposedReference<Transform> target;
    public DialogueBehaviour template = new MyBehaviour();

    public ClipCaps clipCaps
    {
		get { return ClipCaps.None; }
    }

    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
		var playable = ScriptPlayable<MyBehaviour>.Create(graph, template);
		var myBehaviour = playable.GetBehaviour();
		myBehaviour.content = content;
		myBehaviour.target = target;
		return playable;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3、常用方法
通常该类中会重写CreatePlayable()方法,常用于实现该类和Behaviour类之间的数据传递,关于
ScriptPlayable 和 PlayableBehaviour的使用 可参考 ScriptPlayable 和 PlayableBehaviour

三、Behaviour
1、用途
接着定义一个Behaviour类继承PlayableBehaviour用于描述片段中触发的行为。官方API

2、代码示例

public class MyBehaviour : PlayableBehaviour
{
    private bool clipPlayed = false;
    private bool pauseScheduled = false;
    private PlayableDirector director;

    public override void OnPlayableCreate(Playable playable)
    {
        director = (playable.GetGraph().GetResolver() as PlayableDirector);
    }
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        if (!clipPlayed && info.weight > 0f)
        {
            if (Application.isPlaying) pauseScheduled = true;
            clipPlayed = true;
        }
    }
    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        if (pauseScheduled)
        {
            pauseScheduled = false;
            clipPlayed = false;
            director.Pause();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/925877
推荐阅读
相关标签
  

闽ICP备14008679号