![](https://img.haomeiwen.com/i2020966/1cca728840bcf123.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;
}
![](https://img.haomeiwen.com/i2020966/6e707cb892effb78.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);
}
}
}
![](https://img.haomeiwen.com/i2020966/c4673cb02c01a7ca.png)
![](https://img.haomeiwen.com/i2020966/09dec0f5771ccda5.png)
自定义行为逻辑,基类有一套自己的生命周期
OnPlayableCreate:每个Clip创建时( Playable播放状态为playing时),相当于Awake
OnGraphStart:每个Clip创建时( Playable播放状态为playing时),在OnPlayableCreate后执行,相当于Start
OnBehaviourPlay:Clip执行时
OnBehaviourPause:Clip暂停时
PrepareFrame:每帧执行,相当于Update,playerData就是轨道绑定的物体,默认是PlayableDirector组件挂载的物体
OnGraphStop:Playable停止时
OnPlayableDestroy:Playable销毁时
网友评论