summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs')
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs75
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);
}
}