From aafae64318a5a08a68b7033441449c36f0f85a17 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 4 Aug 2021 17:37:56 +0800 Subject: *actiontool --- Assets/Scripts/Unit/Component/UnitAnimation.cs | 88 +++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 10 deletions(-) (limited to 'Assets/Scripts/Unit/Component/UnitAnimation.cs') diff --git a/Assets/Scripts/Unit/Component/UnitAnimation.cs b/Assets/Scripts/Unit/Component/UnitAnimation.cs index 5ef7b7a1..18439efb 100644 --- a/Assets/Scripts/Unit/Component/UnitAnimation.cs +++ b/Assets/Scripts/Unit/Component/UnitAnimation.cs @@ -1,6 +1,9 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif public class AnimatorLayerInfo { @@ -8,10 +11,40 @@ public class AnimatorLayerInfo public int layerIndex { get { return (int)layer; } } + public string name { get { return m_Animator.GetLayerName(layerIndex); } } + private Animator m_Animator; - public AnimationData animationData; + // 当前动作的animation data,如果是blendtree选第一个动作 private AnimationData m_AnimationData; + public AnimationData animationData + { + get + { + if (clipInfo == null || clipInfo.Length == 0) + return null; + var clip = clipInfo[0]; //选第一个 + string folder = m_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 + return m_AnimationData; + } + } + + // 当前动作所有animation data,包括blendtree使用的所有动画 + //private List m_AnimationDatas; + //public List animationDatas + //{ + // get + // { + // return null; + // } + //} // 当前在播放的动作 // 如果处于transition中,动作不变,切换完成后才会到下一个动作 @@ -56,10 +89,39 @@ public class AnimatorLayerInfo } } - public int pendingStateHash; + public float weight + { + get + { + return m_Animator.GetLayerWeight(layerIndex); + } + } + + public int nextStateHash + { + get + { + //if (!isInTransition) + // return 0; + AnimatorStateInfo nextState = m_Animator.GetNextAnimatorStateInfo(layerIndex); + int hash = nextState.shortNameHash; // 如果不在过渡中,hash是0 + return hash; + } + } + + public bool isInTransition + { + get + { + return m_Animator.IsInTransition(layerIndex); + } + } - public AnimatorLayerInfo(Animator animator, UnitAnimation.ELayer layer) + UnitController m_Owner; + + public AnimatorLayerInfo(UnitController owner, Animator animator, UnitAnimation.ELayer layer) { + this.m_Owner = owner; this.m_Animator = animator; this.layer = layer; } @@ -77,7 +139,10 @@ public class UnitAnimation : UnitComponent { Basic = 0, Attack, - + SwordAttack, + GunAttack, + UpperBody, + LowerBody, Count, } @@ -112,7 +177,7 @@ public class UnitAnimation : UnitComponent private UnitActionData m_ActionData; public AnimatorLayerInfo[] layers { get { return m_LayerInfo; } } - private AnimatorLayerInfo[] m_LayerInfo = new AnimatorLayerInfo[(int)ELayer.Count]; + private readonly AnimatorLayerInfo[] m_LayerInfo = new AnimatorLayerInfo[(int)ELayer.Count]; public bool isInTransition { @@ -121,8 +186,6 @@ public class UnitAnimation : UnitComponent return m_Animator.IsInTransition(0); } } - //public EAnimState curState { get { return m_CurState; } } - //private EAnimState m_CurState; public override void Initialize() { @@ -133,8 +196,8 @@ public class UnitAnimation : UnitComponent m_Animator.speed = 0; - m_LayerInfo[0] = new AnimatorLayerInfo(m_Animator, ELayer.Basic); - m_LayerInfo[1] = new AnimatorLayerInfo(m_Animator, ELayer.Attack); + m_LayerInfo[0] = new AnimatorLayerInfo(m_Owner, m_Animator, ELayer.Basic); + m_LayerInfo[1] = new AnimatorLayerInfo(m_Owner, m_Animator, ELayer.Attack); if (m_Animator == null) { @@ -174,7 +237,12 @@ public class UnitAnimation : UnitComponent public void AnimAttack() { - m_Animator.SetTrigger(ETrigger.ToAttack.ToString()); + SetTrigger(ETrigger.ToAttack); + } + + void SetTrigger(ETrigger trigger) + { + m_Animator.SetTrigger(trigger.ToString()); } } -- cgit v1.1-26-g67d0