diff options
author | chai <chaifix@163.com> | 2022-06-21 13:05:57 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-06-21 13:05:57 +0800 |
commit | a06a952a5c7a02573abb05153c709a7bc541ba15 (patch) | |
tree | 16c12e8841af776d0e6b6c85f69def62bf6da2c4 /Erika/Assets/Scripts/Unit | |
parent | a6edbf35030ff5732e99db1dc4b119ba5b841aac (diff) |
* unit state
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
7 files changed, 64 insertions, 24 deletions
diff --git a/Erika/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs b/Erika/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs index 82f3e792..16fbc2e5 100644 --- a/Erika/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs +++ b/Erika/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs @@ -3,6 +3,9 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +/// <summary>
+/// 等待动画过渡结束
+/// </summary> public class WaitForTransitionDone : IEnumerator {
UnitAnimation m_UnitAnimation;
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs index 74c33626..0620c0b6 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -138,10 +138,10 @@ public class PCAnimation : UnitAnimation { m_LayerInfo[0].OnUpdate(); return; - for (int i = 0; i < m_LayerInfo.Length; ++i) - { - m_LayerInfo[i].OnUpdate(); - } + //for (int i = 0; i < m_LayerInfo.Length; ++i) + //{ + // m_LayerInfo[i].OnUpdate(); + //} } void UpdateAnimation() diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index da16b947..931e49ab 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -7,6 +7,8 @@ using UnityEngine; using UnityEditor; #endif +// http://unitylore.org/wiki/doku.php?id=l3y0gj
+ // 单独一层动画 public class AnimatorLayerInfo { @@ -27,14 +29,17 @@ public class AnimatorLayerInfo get { AnimatorClipInfo[] clipInfos = clipsInfo; - if (clipInfos == null || clipInfos.Length == 0) + if (clipInfos == null || clipInfos.Length == 0)
+ {
+ LogHelper.LogError(LogTag.UnitAnimation, "No current animation.");
return null; + } 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" ; // 要注意这里使用名字区别的,因为最终每个角色的动画都会在一个目录下面 + string path = folder + "AnimationData/" + name + ".asset" ; // 要注意这里是用名字区别的,因为最终每个角色的动画都会在一个目录下面 m_AnimationData = ResourceManager.Instance.LoadAsset<AnimationData>(path); return m_AnimationData; } @@ -51,7 +56,6 @@ public class AnimatorLayerInfo { stateInfo = m_Animator.GetNextAnimatorStateInfo(layerIndex); } - // Debug.Assert(stateInfo.IsName(layerName + "." + m_CurrentState)); return stateInfo; } } @@ -123,11 +127,6 @@ public class AnimatorLayerInfo AnimatorStateInfo state = stateInfo; if (!state.loop && state.normalizedTime > 1) return 1; - //if (state.IsName("Attack0"))
- //{
- // Debug.Log("normalizedTime=" + state.normalizedTime); - // Debug.Log("playbackTimeInSeconds=" + state.normalizedTime * clipInfo.clip.length); - //} return state.normalizedTime % 1f; } } @@ -279,6 +278,12 @@ public class UnitAnimation : UnitComponent base.OnUpdate();
}
+ /// <summary>
+ /// 直接播放动作
+ /// </summary>
+ /// <param name="animState"></param>
+ /// <param name="layerIndex"></param>
+ /// <param name="normalizedTime"></param>
public void Play(string animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) {
AnimatorLayerInfo layer = this.layers[layerIndex];
@@ -293,6 +298,14 @@ public class UnitAnimation : UnitComponent }
}
+ /// <summary>
+ /// CrossFade
+ /// </summary>
+ /// <param name="animState"></param>
+ /// <param name="normalizedTransitionDuration"></param>
+ /// <param name="layerIndex"></param>
+ /// <param name="normalizedTimeOffset"></param>
+ /// <param name="normalizedTransitionTime"></param>
public void CrossFade(string animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
{
AnimatorLayerInfo layer = this.layers[layerIndex];
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs b/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs index 825b6d92..dd59f19f 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs @@ -2,6 +2,9 @@ using System.Collections.Generic; using UnityEngine; +/// <summary>
+/// Unit组件
+/// </summary> public class UnitComponent : MonoBehaviour { public UnitController owner { get { return m_Owner; } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs index 738cc7ce..ff7ca78b 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs @@ -108,7 +108,8 @@ public partial class PCState : UnitState TryAttackToAir();
yield return null; } - ChangeState(EUnitState.Idle, new IdleParam()); + ChangeState(EUnitState.Idle, new IdleParam());
+ yield break; } void OnMoveExit(EUnitState nextState) @@ -136,6 +137,7 @@ public partial class PCState : UnitState SkillParam skill = new SkillParam();
skill.offset = 0.12f;
ChangeState(EUnitState.AttackToAir, skill);
+ yield break; }
}
@@ -154,6 +156,7 @@ public partial class PCState : UnitState if (isAnimationReachEnd)
{
ChangeState(EUnitState.Idle, new IdleParam());
+ yield break; }
yield return null;
@@ -184,12 +187,14 @@ public partial class PCState : UnitState if (InputManager.Instance.TryCommand(0.5f, false, KeyCode.J))
{
ChangeState(EUnitState.AirAttack, new SkillParam());
+ yield break; }
}
if (isAnimationReachEnd || isAnimationReachEndPoint) { - ChangeState(EUnitState.Landing, new LandingParam()); + ChangeState(EUnitState.Landing, new LandingParam());
+ yield break; }
yield return null;
}
@@ -228,14 +233,15 @@ public partial class PCState : UnitState m_Owner.pcAnimation.AnimAirAttack(id++);
id %= total; - yield return null; // 等待animator更新 + //yield return null; // 等待animator更新 yield return new WaitForTransitionDone(m_Owner.pcAnimation); } } if (isAnimationReachEnd) { - ChangeState(EUnitState.Landing, new LandingParam()); + ChangeState(EUnitState.Landing, new LandingParam());
+ yield break; } yield return null; @@ -259,7 +265,8 @@ public partial class PCState : UnitState { if (isAnimationReachEnd) { - ChangeState(EUnitState.Landing, new LandingParam()); + ChangeState(EUnitState.Landing, new LandingParam());
+ yield break; } TryTianyin(); @@ -271,7 +278,8 @@ public partial class PCState : UnitState if (Input.GetKeyDown("j")) {
TryTurnAround(); - ChangeState(EUnitState.AirAttack, new SkillParam()); + ChangeState(EUnitState.AirAttack, new SkillParam());
+ yield break; } } @@ -298,18 +306,24 @@ public partial class PCState : UnitState { TurnLeft(); ChangeState(EUnitState.AirDash, new AirDashParam()); + yield break; } if (InputManager.Instance.TryCommand(0.5f, KeyCode.D, KeyCode.D)) { TurnRight(); ChangeState(EUnitState.AirDash, new AirDashParam()); + yield break; } - if (isAnimationReachEnd) + if (isAnimationReachEnd)
+ {
ChangeState(EUnitState.Landing, new LandingParam()); + yield break;
+ } bool canAttack = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo); if (Input.GetKeyDown("j") && canAttack) { - ChangeState(EUnitState.AirAttack, new SkillParam()); + ChangeState(EUnitState.AirAttack, new SkillParam());
+ yield break;
} yield return null; } @@ -361,6 +375,7 @@ public partial class PCState : UnitState if (Input.GetKeyDown("j"))
{
ChangeState(EUnitState.AirAttack, new SkillParam());
+ yield break;
} m_Owner.transform.position = pos; @@ -374,7 +389,8 @@ public partial class PCState : UnitState { pos.y = 0; m_Owner.transform.position = pos; - ChangeState(EUnitState.Idle, new IdleParam()); + ChangeState(EUnitState.Idle, new IdleParam());
+ yield break;
} yield return null; diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs index ff42c2be..2d39f606 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs @@ -4,7 +4,10 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -// 角色状态机 + +/// <summary>
+/// 角色状态机
+/// </summary> [DisallowMultipleComponent] public class UnitState : UnitComponent { diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs index 5234daab..e920fff8 100644 --- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs @@ -5,7 +5,9 @@ using UnityEngine; using UnityEditor;
#endif
-// 同步root motion到角色根节点
+/// <summary>
+/// 同步root motion到角色根节点
+/// </summary>
[DisallowMultipleComponent]
public class UnitRootMotion : UnitComponent
{
@@ -108,7 +110,7 @@ public class UnitRootMotion : UnitComponent }
else
{
- // 因为Unti被旋转了90度,所以这里的deltaPosition的forward是x方向了
+ // 因为Unit被旋转了90度,所以这里的deltaPosition的forward是x方向了
Vector3 dest = m_Owner.unitAnimation.animator.deltaPosition;
dest.z = 0;
var state = m_Owner.unitAnimation.baseLayer.stateInfo;
|