summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/UnitRootMotion.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit/UnitRootMotion.cs')
-rw-r--r--Assets/Scripts/Unit/UnitRootMotion.cs56
1 files changed, 42 insertions, 14 deletions
diff --git a/Assets/Scripts/Unit/UnitRootMotion.cs b/Assets/Scripts/Unit/UnitRootMotion.cs
index c920010a..5a17da61 100644
--- a/Assets/Scripts/Unit/UnitRootMotion.cs
+++ b/Assets/Scripts/Unit/UnitRootMotion.cs
@@ -11,15 +11,21 @@ public class UnitRootMotion : UnitComponent
{
RootMotionData m_RootMotionData;
- private float m_PrevNormalTime;
+ float m_PrevFrame;
+ AnimationData m_PrevAnimationData;
public override void Initialize()
{
base.Initialize();
+
+ m_PrevFrame = 0;
+ m_PrevAnimationData = null;
}
#if false // 用自定义root motion
+ private float m_PrevNormalTime;
+
Dictionary<UnitAnimation.EAnimState, RootMotionData> m_RootMotionDic = new Dictionary<UnitAnimation.EAnimState, RootMotionData>();
public void Reset()
@@ -63,25 +69,47 @@ public class UnitRootMotion : UnitComponent
#else
- public override void OnUpdate()
+ public override void OnUpdate()
{
base.OnUpdate();
}
+ public void OnAnimationChange()
+ {
+ m_PrevAnimationData = null;
+ }
+
public void UpdateRootMotion()
{
- // 因为Unti被旋转了90度,所以这里的deltaPosition的forward是x方向了
- Vector3 dest = m_Owner.unitAnimation.animator.deltaPosition;
- dest.z = 0;
-
- var state = m_Owner.unitAnimation.layers[0].stateInfo;
- if(state.IsTag("IgnoreY"))
- {
- dest.y = 0;
- }
-
- //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
- m_Owner.transform.position += dest;
+ bool overrideRootMotion = m_Owner.unitAnimation.baseLayer.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;
+ if(animData != m_PrevAnimationData)
+ {
+ m_PrevAnimationData = animData;
+ m_PrevFrame = frame;
+ }
+ Vector3 dest = rmData.GetRootMotionDistance(m_PrevFrame, frame);
+ m_Owner.transform.position += dest;
+ m_PrevFrame = frame;
+ }
+ else
+ {
+ // 因为Unti被旋转了90度,所以这里的deltaPosition的forward是x方向了
+ Vector3 dest = m_Owner.unitAnimation.animator.deltaPosition;
+ dest.z = 0;
+ var state = m_Owner.unitAnimation.baseLayer.stateInfo;
+ if (state.IsTag("IgnoreY"))
+ {
+ dest.y = 0;
+ }
+ //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
+ m_Owner.transform.position += dest;
+ }
}
#endif