Timeline 概述
什么是Timeline?Timeline是一个线性编辑工具,用于序列化不同元素,
包括动画剪辑、音乐、音效、摄像机画面、粒子特效以及其它Timeline。它主要是为实时播放而设计。
注意:使用TimeLine需要2017以上的版本 , 如果要使用Signal信号系统,请使用2019以上的版本
Timeline 自定义轨道
这里暂时就不对基础的Timeline组建使用做过多赘述,网上有很多相关例子,我这里介绍一些Timeline的自定义轨道的使用。
一个完整的timeline轨道包含(Track(轨道),Clip(片段),Behaviour(行为), Mixer(融合))这四个脚本。
Track 轨道组件
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
using UnityEngine.UI;
[TrackColor(193/255f, 210/255f, 240/255f)] // 设置轨道的颜色值,可以在网上查自己喜欢的颜色放到上面
[TrackBindingType(typeof(Text))] // 设置轨道绑定的类型
[TrackClipType(typeof(TextClip))] // 设置该轨道可使用的片段对象
public class TextTrack : TrackAsset // 轨道组件需要继承这个类
{
public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
{
return ScriptPlayable<TextMixerBehaviour>.Create(graph, inputCount);
}
}
Clip 片段组件
using UnityEngine;
using UnityEngine.Playables;
public class TextClip : PlayableAsset
{
public TextBehaviour template = new TextBehaviour();
public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
{
return ScriptPlayable<TextBehaviour>.Create(graph, template);
}
}
MixerBehaviour 融合组建
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.UI;
public class TextMixerBehaviour : PlayableBehaviour
{
private Color _color;
private int _fontSize;
private string _text;
private float _alpha;
private Text _bindingText;
public override void ProcessFrame(Playable playable, FrameData info, object playerData)
{
_bindingText = playerData as Text;
_text = "";
if (!_bindingText) { return; }
int inputCount = playable.GetInputCount();
for (int i = 0; i < inputCount; i++)
{
float inputWeight = playable.GetInputWeight(i);
if (inputWeight > 0f)
{
ScriptPlayable<TextBehaviour> inputPlayable =
(ScriptPlayable<TextBehaviour>)playable.GetInput(i);
TextBehaviour input = inputPlayable.GetBehaviour();
_text = input.text;
_fontSize = input.fontSize;
_color = input.color;
_alpha = inputWeight;
_color.a = _alpha;
}
}
_bindingText.text = _text;
_bindingText.fontSize = _fontSize;
_bindingText.color = _color;
}
public override void OnPlayableDestroy(Playable playable)
{
if (_bindingText == null) { return; }
_bindingText.color = _color;
_bindingText.fontSize = _fontSize;
_bindingText.text = _text;
}
}
Behaviour 行为组件
using UnityEngine;
using UnityEngine.Playables;
[System.Serializable]
public class TextBehaviour : PlayableBehaviour
{
public string text;
public int fontSize;
public Color color = Color.red;
}
这样就完成了一个自定义的轨道,基本上都是大同小异
当然你也可以在 Behaviour 行为组件里写入逻辑,但是这样就不会有融合的效果
以上的内容也是在网上搜罗了很久加上自己的一些理解做的笔记