diff options
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitAnimation')
3 files changed, 49 insertions, 47 deletions
diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs index d7138516..f8786914 100644 --- a/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs +++ b/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -33,7 +33,7 @@ public class MonsterAnimation : UnitAnimation m_Animator.speed = 0; m_LayerInfo = new AnimatorLayerInfo[2]; - m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic, ELayer.Basic.ToString()); + m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic); //m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack); if (m_Animator == null) diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs index 41f9e8b6..a4752a8b 100644 --- a/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -61,6 +61,11 @@ public class PCAnimation : UnitAnimation LandingGround, } + public override AnimatorLayerInfo baseLayer
+ {
+ get { return layers[(int)ELayer.Basic]; }
+ } + private UnitActionData m_ActionData; public bool applyRootMotion { get; set; }// 动态设置root motion @@ -75,7 +80,7 @@ public class PCAnimation : UnitAnimation m_Animator.speed = 0; m_LayerInfo = new AnimatorLayerInfo[2]; - m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic, ELayer.Basic.ToString()); + m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic); //m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack); if (m_Animator == null) @@ -204,18 +209,12 @@ public class PCAnimation : UnitAnimation private void Play(EAnimState animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) { - AnimatorLayerInfo layer = this.layers[layerIndex]; - if (layer == null) - return; - layer.OnPlay(animState.ToString(), normalizedTime); + base.Play(animState.ToString(), layerIndex, normalizedTime); } - public void CrossFade(EAnimState animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + private void CrossFade(EAnimState 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.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); + base.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); } } 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<AnimationData>(path); -#endif + m_AnimationData = ResourceManager.Instance.LoadAsset<AnimationData>(path); return m_AnimationData; } } - // 当前动作所有animation data,包括blendtree使用的所有动画 - //private List<AnimationData> m_AnimationDatas; - //public List<AnimationData> 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);
} } |