diff options
author | chai <chaifix@163.com> | 2022-06-22 21:23:46 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-06-22 21:23:46 +0800 |
commit | 11bd605dadecb7459bc60fcda33e2e7d8275ed5d (patch) | |
tree | 1b4e52089ef361899f3028d46ce66660d9f22172 | |
parent | 75d25b755500b4117e909d50943bd14056a6ccf2 (diff) |
- multilayer\old animation solution
11 files changed, 93 insertions, 43 deletions
diff --git a/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs b/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs index 295b1025..22d7b014 100644 --- a/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs +++ b/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs @@ -21,8 +21,7 @@ public class WaitForActionReachEnd : IEnumerator public bool MoveNext() { - var layer = m_UnitAnimation.layers[m_Layer]; - return layer.playbackNormalizedTime < 1f; + return m_UnitAnimation.playbackNormalizedTime < 1f; } public void Reset() diff --git a/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs b/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs index ec04f3be..ec29b364 100644 --- a/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs +++ b/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs @@ -30,7 +30,7 @@ public class AfterImageAvatar : MonoBehaviour transform.position = prototype.transform.position; animator.runtimeAnimatorController = prototype.unitAnimation.animator.runtimeAnimatorController; - animator.Play(prototype.unitAnimation.baseLayer.stateHash, 0, prototype.unitAnimation.baseLayer.playbackNormalizedTime); + animator.Play(prototype.unitAnimation.stateHash, 0, prototype.unitAnimation.playbackNormalizedTime); animator.speed = 0.02f;
animator.Update(1 / 60f);
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs index 0620c0b6..0f4f4e11 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -64,7 +64,7 @@ public class PCAnimation : UnitAnimation LandingGround, } - public override AnimatorLayerInfo baseLayer
+ private new AnimatorLayerInfo baseLayer
{
get { return layers[(int)ELayer.Basic]; }
} @@ -238,7 +238,7 @@ public class PCAnimation : UnitAnimation public void AnimAirDash() { AnimationData data = GetAnimationDataOfState(EAnimState.AirDash.ToString()); - if (baseLayer.stateInfo.IsName(EAnimState.AirDash.ToString())) + if (stateInfo.IsName(EAnimState.AirDash.ToString())) { float offset = data.GetProperty(EAnimationProperty.ComboTimeOffset, 0); this.Play(EAnimState.AirDash, offset); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index 931e49ab..653564b7 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -240,24 +240,23 @@ public class AnimatorLayerInfo playbackSpeed = 1;
} - } [DisallowMultipleComponent] public class UnitAnimation : UnitComponent { - public AnimatorLayerInfo[] layers { get { return m_LayerInfo; } } + protected AnimatorLayerInfo[] layers { get { return m_LayerInfo; } } protected AnimatorLayerInfo[] m_LayerInfo; public Animator animator { get { return m_Animator; } } protected Animator m_Animator;
- public virtual AnimatorLayerInfo baseLayer
+ protected virtual AnimatorLayerInfo baseLayer
{
get { return layers[0]; }
- } - - public AnimatorLayerInfo layer + }
+
+ protected AnimatorLayerInfo layer { get
{
@@ -273,18 +272,71 @@ public class UnitAnimation : UnitComponent } }
- public override void OnUpdate()
+ public AnimationData animationData
+ {
+ get
+ {
+ return layer.animationData;
+ }
+ }
+
+ public AnimatorClipInfo[] clipsInfo
+ {
+ get
+ {
+ return layer.clipsInfo;
+ }
+ }
+
+ public AnimatorClipInfo clipInfo
+ {
+ get
+ {
+ return layer.clipInfo;
+ }
+ }
+
+ public float playbackNormalizedTime
+ {
+ get
+ {
+ return layer.playbackNormalizedTime;
+ }
+ }
+
+ public AnimatorStateInfo stateInfo
+ {
+ get
+ {
+ return layer.stateInfo;
+ }
+ }
+
+ public int stateHash
+ {
+ get
+ {
+ return layer.stateHash;
+ }
+ }
+
+ public override void OnUpdate()
{
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) + public bool IsToggleOpen(EAnimationToogle toggle)
+ {
+ return layer.IsToggleOpen(toggle);
+ }
+
+ /// <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];
if (layer == null)
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs index 3fd9a6dc..ff54e7a4 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs @@ -33,14 +33,13 @@ public class UnitCollider : UnitComponent // 返回当前激活的对应类型的碰撞盒数据 public ColliderInfo[] GetCurrentBoxesInfoByType(ColliderBox.EColliderType type, int layer = 0) { - var layerInfo = m_Owner.unitAnimation.layers[0]; - AnimationData animData = layerInfo.animationData; - AnimatorClipInfo[] clipInfos = layerInfo.clipsInfo; + AnimationData animData = m_Owner.unitAnimation.animationData; + AnimatorClipInfo[] clipInfos = m_Owner.unitAnimation.clipsInfo; //if(clipInfos == null || clipInfos.Length == 0) //{ // return null; //} - float playbackTime = layerInfo.playbackNormalizedTime * clipInfos[0].clip.length; + float playbackTime = m_Owner.unitAnimation.playbackNormalizedTime * clipInfos[0].clip.length; //float playbackTime = layerInfo.playbackRealTimeInSeconds; ColliderInfo[] infos = animData.GetActiveCollidersInfo(type, playbackTime); return infos; diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs index 5c1280be..43376f68 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs @@ -116,7 +116,7 @@ public class MonsterState : UnitState yield return null; while (true) { - bool reachEnd = m_Owner.monsterAnimation.layers[0].playbackNormalizedTime == 1; + bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; if(reachEnd) { ChangeState(EUnitState.Idle, new IdleParam()); @@ -140,7 +140,7 @@ public class MonsterState : UnitState yield return null; while (true) { - bool reachEnd = m_Owner.monsterAnimation.layers[0].playbackNormalizedTime == 1; + bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; if (reachEnd) { //yield return new WaitForSeconds(1f); @@ -167,7 +167,7 @@ public class MonsterState : UnitState float g = -15.8f; while (true) { - bool reachEnd = m_Owner.monsterAnimation.baseLayer.playbackNormalizedTime == 1; + bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; if (reachEnd) { vy += g * Time.deltaTime; @@ -198,7 +198,7 @@ public class MonsterState : UnitState yield return null; while (true) { - bool reachEnd = m_Owner.monsterAnimation.layers[0].playbackNormalizedTime == 1; + bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; if (reachEnd) { ChangeState(EUnitState.Idle, new IdleParam()); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs index ff7ca78b..051f1ee8 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs @@ -319,7 +319,7 @@ public partial class PCState : UnitState ChangeState(EUnitState.Landing, new LandingParam()); yield break;
} - bool canAttack = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo); + bool canAttack = m_Owner.pcAnimation.IsToggleOpen(EAnimationToogle.Combo); if (Input.GetKeyDown("j") && canAttack) { ChangeState(EUnitState.AirAttack, new SkillParam());
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs index 2d39f606..b15aeb38 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs @@ -16,7 +16,7 @@ public class UnitState : UnitComponent {
get
{
- return owner.unitAnimation.baseLayer.playbackNormalizedTime == 1;
+ return owner.unitAnimation.playbackNormalizedTime == 1;
}
} @@ -25,10 +25,9 @@ public class UnitState : UnitComponent {
get
{
- var layer = owner.unitAnimation.baseLayer;
- if (!layer.animationData.HasProperty(EAnimationProperty.Endpoint))
+ if (!owner.unitAnimation.animationData.HasProperty(EAnimationProperty.Endpoint))
return false;
- return layer.playbackNormalizedTime >= layer.animationData.GetProperty(EAnimationProperty.Endpoint);
+ return owner.unitAnimation.playbackNormalizedTime >= owner.unitAnimation.animationData.GetProperty(EAnimationProperty.Endpoint);
}
} @@ -36,7 +35,7 @@ public class UnitState : UnitComponent {
get
{
- return owner.unitAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo);
+ return owner.unitAnimation.IsToggleOpen(EAnimationToogle.Combo);
}
} diff --git a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs index 06d5a840..d3f936df 100644 --- a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs +++ b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs @@ -256,8 +256,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/ UnitSnapshotInfo snapshot = new UnitSnapshotInfo();
snapshot.trs = new TRS(unitObj.transform.position, unitObj.transform.rotation, unitObj.transform.lossyScale);
snapshot.unit = this;
- snapshot.animStateHash = unitAnimation.baseLayer.stateHash;
- snapshot.normalizedTime = unitAnimation.baseLayer.playbackNormalizedTime;
+ snapshot.animStateHash = unitAnimation.stateHash;
+ snapshot.normalizedTime = unitAnimation.playbackNormalizedTime;
return snapshot;
}
diff --git a/Erika/Assets/Scripts/Unit/TransitionData.cs b/Erika/Assets/Scripts/Unit/TransitionData.cs index c0a47b5d..27333b54 100644 --- a/Erika/Assets/Scripts/Unit/TransitionData.cs +++ b/Erika/Assets/Scripts/Unit/TransitionData.cs @@ -19,6 +19,8 @@ public class TransitionData PoseDifference, // 对比前后pose的差异
}
- public float duration; // Fixedtime or Normlaizedtime
+ public float duration; // FixedTime 或 NormalizedTime
+
+
}
diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs index 396189bc..19e8b3b7 100644 --- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs @@ -83,13 +83,12 @@ public class UnitRootMotion : UnitComponent public void UpdateRootMotion()
{
- bool overrideRootMotion = m_Owner.unitAnimation.baseLayer.animationData.overrideRootMotion;
+ bool overrideRootMotion = m_Owner.unitAnimation.animationData.overrideRootMotion;
if(overrideRootMotion)
{
- var baseLayer = m_Owner.unitAnimation.baseLayer;
- var rmData = m_Owner.unitAnimation.baseLayer.animationData.rootMotionOverrideData;
- float frame = baseLayer.playbackNormalizedTime * baseLayer.clipInfo.clip.length * TimelineEventProxy.FPS;
- var animData = m_Owner.unitAnimation.baseLayer.animationData;
+ var rmData = m_Owner.unitAnimation.animationData.rootMotionOverrideData;
+ float frame = m_Owner.unitAnimation.playbackNormalizedTime * m_Owner.unitAnimation.clipInfo.clip.length * TimelineEventProxy.FPS;
+ var animData = m_Owner.unitAnimation.animationData;
if(animData != m_PrevAnimationData)
{
m_PrevAnimationData = animData;
@@ -113,8 +112,8 @@ public class UnitRootMotion : UnitComponent // 因为Unit被旋转了90度,所以这里的deltaPosition的forward是x方向了
Vector3 dest = m_Owner.unitAnimation.animator.deltaPosition;
dest.z = 0;
- var state = m_Owner.unitAnimation.baseLayer.stateInfo;
- bool ignoreY = m_Owner.unitAnimation.baseLayer.animationData.GetProperty(EAnimationProperty.IgnoreY, 0) != 0;
+ var state = m_Owner.unitAnimation.stateInfo;
+ bool ignoreY = m_Owner.unitAnimation.animationData.GetProperty(EAnimationProperty.IgnoreY, 0) != 0;
if (state.IsTag("IgnoreY") || ignoreY)
{
dest.y = 0;
|