lyh916

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考链接:

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

posted on 2021-09-12 23:31  艰苦奋斗中  阅读(1223)  评论(0编辑  收藏  举报