From c8af1f2c55109092f2c305f2fac5ab240d46399b Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 1 Sep 2021 11:55:38 +0800 Subject: *misc --- .../Unit/Components/UnitAnimation/UnitAnimation.cs | 75 +++++++++++----------- 1 file changed, 39 insertions(+), 36 deletions(-) (limited to 'Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs') diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index f07d9671..2aad1e5f 100644 --- a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -24,31 +24,20 @@ public class AnimatorLayerInfo { get { - if (clipInfo == null || clipInfo.Length == 0) + AnimatorClipInfo[] clipInfos = clipInfo; + if (clipInfos == null || clipInfos.Length == 0) return null; - var clip = clipInfo[0]; //选第一个 + var clip = clipInfos[0]; //选第一个 string folder = m_UnitAnimation.owner.folder; string name = clip.clip.name; if (m_AnimationData != null && m_AnimationData.animationName == name) return m_AnimationData; string path = folder + "AnimationData/" + name + ".asset" ; // 要注意这里使用名字区别的,因为最终每个角色的动画都会在一个目录下面 -#if UNITY_EDITOR - m_AnimationData = AssetDatabase.LoadAssetAtPath(path); -#endif + m_AnimationData = ResourceManager.Instance.LoadAsset(path); return m_AnimationData; } } - // 当前动作所有animation data,包括blendtree使用的所有动画 - //private List m_AnimationDatas; - //public List animationDatas - //{ - // get - // { - // return null; - // } - //} - // 当前在播放的动作 // 如果处于transition中,动作不变,切换完成后才会到下一个动作 public AnimatorStateInfo stateInfo @@ -72,11 +61,18 @@ public class AnimatorLayerInfo { get { - AnimatorClipInfo[] clips = m_Animator.GetCurrentAnimatorClipInfo(layerIndex); - if(clips.Length == 0) - { - // 如果transition设置了打断,会出现GetCurrentAnimatorClipinfo返回空数组的情况 - clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); + AnimatorClipInfo[] clips = null; + if (!isInTransition) + { + clips = m_Animator.GetCurrentAnimatorClipInfo(layerIndex); + if (clips.Length == 0) + { + clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); + } + } + else + { + clips = m_Animator.GetNextAnimatorClipInfo(layerIndex); } return clips; } @@ -90,14 +86,6 @@ public class AnimatorLayerInfo } } - //public float playbackTimeInSeconds - //{ - // get - // { - // return stateInfo.normalizedTime * stateInfo.length;// stateInfo.length会等于infinity,因为设置了animator.speed = 0 - // } - //} - // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速 public float playbackTimeInSeconds { @@ -154,8 +142,6 @@ public class AnimatorLayerInfo { get { - //if (!isInTransition) - // return 0; AnimatorStateInfo nextState = m_Animator.GetNextAnimatorStateInfo(layerIndex); int hash = nextState.shortNameHash; // 如果不在过渡中,hash是0 return hash; @@ -180,11 +166,8 @@ public class AnimatorLayerInfo public string m_CurrentState; - public readonly string layerName; - - public AnimatorLayerInfo(UnitAnimation unitAnimation, Animator animator, int layer, string layerName) + public AnimatorLayerInfo(UnitAnimation unitAnimation, Animator animator, int layer) { - this.layerName = layerName; this.m_UnitAnimation = unitAnimation; this.m_Animator = animator; this.layer = layer; @@ -251,8 +234,12 @@ public class UnitAnimation : UnitComponent protected AnimatorLayerInfo[] m_LayerInfo; public Animator animator { get { return m_Animator; } } - protected Animator m_Animator; - + protected Animator m_Animator; + + public virtual AnimatorLayerInfo baseLayer + { + get { return layers[0]; } + } public bool isInTransition { @@ -260,6 +247,22 @@ public class UnitAnimation : UnitComponent { return m_Animator.IsInTransition(0); } + } + + public void Play(string animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) + { + AnimatorLayerInfo layer = this.layers[layerIndex]; + if (layer == null) + return; + layer.OnPlay(animState, normalizedTime); + } + + public void CrossFade(string animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + { + AnimatorLayerInfo layer = this.layers[layerIndex]; + if (layer == null) + return; + layer.OnCrossFade(animState, normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); } } -- cgit v1.1-26-g67d0