参考链接:
https://www.jianshu.com/p/56b56d80fbc8
https://www.jianshu.com/p/20801229717a
Timeline需要unity2017以上
1.点击菜单栏Window/Sequencing/Timeline打开窗口
创建一个空物体,点击“Create”,这时会创建一个.playable的资源,同时会为该物体挂上“PlayableDirector”和“Animator”组件,其中PlayableDirector是用来播放.playable文件的
2. 将1个模型预制体拖到上面的Timeline根物体下,然后将模型预制体中带有“Animator”组件的子物体拖到Track区域上,然后选择Animation轨道
3.将该模型的动画拖上去,运行游戏,这时Timeline的动画会覆盖模型动画控制器的动画,即播放的是Timeline的动画
4.自定义扩展
PlayableBehaviour
1 using UnityEngine; 2 using UnityEngine.Playables; 3 4 public class LightPlayableBehaviour : PlayableBehaviour 5 { 6 public Light light = null; 7 public Color color = Color.white; 8 public float intensity = 1f; 9 10 public override void OnGraphStart(Playable playable) 11 { 12 base.OnGraphStart(playable); 13 Debug.Log("OnGraphStart"); 14 } 15 16 public override void OnGraphStop(Playable playable) 17 { 18 base.OnGraphStop(playable); 19 Debug.Log("OnGraphStop"); 20 } 21 22 public override void OnBehaviourPlay(Playable playable, FrameData info) 23 { 24 base.OnBehaviourPlay(playable, info); 25 Debug.Log("OnBehaviourPlay"); 26 light.color = color; 27 light.intensity = intensity; 28 } 29 30 public override void OnBehaviourPause(Playable playable, FrameData info) 31 { 32 base.OnBehaviourPause(playable, info); 33 Debug.Log("OnBehaviourPause"); 34 light.color = Color.white; 35 light.intensity = 1; 36 } 37 38 public override void ProcessFrame(Playable playable, FrameData info, object playerData) 39 { 40 base.ProcessFrame(playable, info, playerData); 41 Debug.Log("ProcessFrame"); 42 } 43 }
PlayableAsset
1 using UnityEngine; 2 using UnityEngine.Playables; 3 4 public class LightPlayableAsset : PlayableAsset 5 { 6 public ExposedReference<Light> light; 7 public Color color = Color.white; 8 public float intensity = 1.0f; 9 10 public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) 11 { 12 var scriptPlayable = ScriptPlayable<LightPlayableBehaviour>.Create(graph); 13 var behaviour = scriptPlayable.GetBehaviour(); 14 behaviour.light = light.Resolve(graph.GetResolver()); 15 behaviour.color = color; 16 behaviour.intensity = intensity; 17 return scriptPlayable; 18 } 19 }
如下,这样就能创建自定义的PlayableAsset
选中该PlayableAsset,PlayableAsset脚本的作用是将面板的值赋给PlayableBehaviour;而PlayableBehaviour则是对这些值进行操作
执行顺序:
OnGraphStart->OnBehaviourPause->OnBehaviourPlay->ProcessFrame->OnBehaviourPause->OnGraphStop