summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Components
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit/Components')
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs2
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs19
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs75
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState.cs18
4 files changed, 58 insertions, 56 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);
}
}
diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Assets/Scripts/Unit/Components/UnitState/PCState.cs
index f6eb7045..435591b0 100644
--- a/Assets/Scripts/Unit/Components/UnitState/PCState.cs
+++ b/Assets/Scripts/Unit/Components/UnitState/PCState.cs
@@ -214,7 +214,7 @@ public class PCState : UnitState
yield return null;
while (true)
{
- bool canCombo = m_Owner.pcAnimation.layers[0].IsToggleOpen(EAnimationToogle.Combo);
+ bool canCombo = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo);
if (canCombo)
{
if (Input.GetKeyDown("j"))
@@ -229,12 +229,12 @@ public class PCState : UnitState
}
++id;
m_Owner.pcAnimation.AnimAttack(id);
- yield return null; // 等待animator更新
+ yield return null;
yield return new WaitForTransitionDone(m_Owner.pcAnimation);
}
}
- bool reachEnd = m_Owner.pcAnimation.layers[0].playbackNormalizedTime == 1;
+ bool reachEnd = m_Owner.pcAnimation.baseLayer.playbackNormalizedTime == 1;
if (reachEnd)
{
ChangeState(EUnitState.Idle, new IdleParam());
@@ -259,7 +259,7 @@ public class PCState : UnitState
yield return null; // 等待animator更新
while (true)
{
- bool canCombo = m_Owner.pcAnimation.layers[0].IsToggleOpen(EAnimationToogle.Combo);
+ bool canCombo = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo);
if (canCombo)
{
if (InputManager.Instance.TryCommand(0.5f, KeyCode.A, KeyCode.A))
@@ -290,7 +290,7 @@ public class PCState : UnitState
}
}
- bool reachEnd = m_Owner.pcAnimation.layers[0].playbackNormalizedTime == 1;
+ bool reachEnd = m_Owner.pcAnimation.baseLayer.playbackNormalizedTime == 1;
if (reachEnd)
{
ChangeState(EUnitState.Landing, new LandingParam());
@@ -315,13 +315,13 @@ public class PCState : UnitState
yield return null;
while (true)
{
- bool reachEnd = m_Owner.pcAnimation.layers[0].playbackNormalizedTime == 1;
+ bool reachEnd = m_Owner.pcAnimation.baseLayer.playbackNormalizedTime == 1;
if (reachEnd)
{
ChangeState(EUnitState.Landing, new LandingParam());
}
- bool canCombo = m_Owner.pcAnimation.layers[0].IsToggleOpen(EAnimationToogle.Combo);
+ bool canCombo = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo);
if (canCombo)
{
if (InputManager.Instance.TryCommand(0.5f, KeyCode.A, KeyCode.A))
@@ -378,9 +378,9 @@ public class PCState : UnitState
TurnRight();
ChangeState(EUnitState.AirDash, new AirDashParam());
}
- if (pcAnimation.layers[0].playbackNormalizedTime >= 1)
+ if (pcAnimation.baseLayer.playbackNormalizedTime >= 1)
ChangeState(EUnitState.Idle, new IdleParam());
- bool canAttack = m_Owner.pcAnimation.layers[0].IsToggleOpen(EAnimationToogle.Combo);
+ bool canAttack = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo);
if (Input.GetKeyDown("j") && canAttack)
{
ChangeState(EUnitState.AirAttack, new SkillParam());