diff options
author | chai <chaifix@163.com> | 2021-09-01 11:55:38 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-01 11:55:38 +0800 |
commit | c8af1f2c55109092f2c305f2fac5ab240d46399b (patch) | |
tree | 8fe4e7f68c0a6b4ced299f9ed50b47be522c09bf /Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs | |
parent | 046002902a421db273d832deea1a0a4b3b989a0c (diff) |
*misc
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs')
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs | 75 |
1 files changed, 39 insertions, 36 deletions
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);
} } |