summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-06-22 21:23:46 +0800
committerchai <chaifix@163.com>2022-06-22 21:23:46 +0800
commit11bd605dadecb7459bc60fcda33e2e7d8275ed5d (patch)
tree1b4e52089ef361899f3028d46ce66660d9f22172
parent75d25b755500b4117e909d50943bd14056a6ccf2 (diff)
- multilayer\old animation solution
-rw-r--r--Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs3
-rw-r--r--Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs4
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs80
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitCollider.cs7
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs8
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs9
-rw-r--r--Erika/Assets/Scripts/Unit/Controller/UnitController.cs4
-rw-r--r--Erika/Assets/Scripts/Unit/TransitionData.cs4
-rw-r--r--Erika/Assets/Scripts/Unit/UnitRootMotion.cs13
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;