unity之 PlayableGraph 动画应用(二)
作者:互联网
续上篇 unity之性能优化 PlayableGraph 动画应用(一)继续:
多个动画如何播放,动画融合、权重等
上代码:
1 using System.Collections.Generic; 2 using UnityEngine; 3 using UnityEngine.Animations; 4 using UnityEngine.Playables; 5 6 public class TestPlayable : MonoBehaviour 7 { 8 private Animator m_Animator; 9 10 [SerializeField] 11 private AnimationClip m_AnimationClip; 12 private PlayableGraph m_PlayableGraph; 13 private AnimationPlayableOutput m_AnimationPlayableOutput; 14 15 void Awake() 16 { 17 m_Animator = GetComponent<Animator>(); 18 //创建画布 19 m_PlayableGraph = PlayableGraph.Create("testGraph"); 20 //为画布创建一个输出节点 21 m_AnimationPlayableOutput = AnimationPlayableOutput.Create(m_PlayableGraph, "OutPut", m_Animator); 22 Test2(); 23 } 24 25 [SerializeField] 26 private AnimationClip[] m_Clips; 27 //动画剪辑Playable列表 28 private List<AnimationClipPlayable> m_AnimationClipPlayable = new List<AnimationClipPlayable>(100); 29 //动画混合 30 private AnimationMixerPlayable m_AnimationMixerPlayable; 31 32 /// <summary> 33 /// 目的是为了 画出图形 34 /// </summary> 35 private void Test2() 36 { 37 int clipCount = m_Clips.Length; 38 //创建动画混合 39 m_AnimationMixerPlayable = AnimationMixerPlayable.Create(m_PlayableGraph, clipCount); 40 //设置output的源头 动画混合 41 m_AnimationPlayableOutput.SetSourcePlayable(m_AnimationMixerPlayable, 0); 42 43 for (int i = 0; i < clipCount; i++) 44 { 45 //创建动画剪辑 46 AnimationClipPlayable animationClipPlayable = AnimationClipPlayable.Create(m_PlayableGraph, m_Clips[i]); 47 //画布连接动画混合、动画剪辑从index = 0到index = count-1 全部跟动画融合相连 48 m_PlayableGraph.Connect(animationClipPlayable, 0, m_AnimationMixerPlayable, i); 49 m_AnimationClipPlayable.Add(animationClipPlayable); 50 } 51 } 52 }
以上代码 运行起来:绘制的画布如下:
好 播放的代码:
1 private int index = 0; 2 private void Play() 3 { 4 m_PlayableGraph.Play(); 5 //通过索引获取playable 6 Playable playable = m_AnimationMixerPlayable.GetInput(index); 7 playable.SetTime(0); 8 playable.Play(); 9 int count = m_AnimationClipPlayable.Count; 10 for (int i = 0; i < count; i++) 11 { 12 if (i == index) 13 { 14 //需要播放的权重设置为1 15 m_AnimationMixerPlayable.SetInputWeight(i, 1); 16 } 17 else 18 { 19 //不播放的权重设置为0 20 m_AnimationMixerPlayable.SetInputWeight(i, 0); 21 } 22 } 23 index++; 24 if (index == count) 25 { 26 index = 0; 27 } 28 } 29 30 void Update() 31 { 32 if (Input.GetKeyUp(KeyCode.P)) 33 { 34 Play(); 35 } 36 }
对于 PlayableGraph 动画应用到这里就结束了。
标签:动画,index,PlayableGraph,private,AnimationPlayableOutput,unity,AnimationMixerPlaya 来源: https://www.cnblogs.com/zhaolaosan/p/16180696.html