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.cs127
1 files changed, 0 insertions, 127 deletions
diff --git a/Assets/Scripts/Unit/UnitRootMotion.cs b/Assets/Scripts/Unit/UnitRootMotion.cs
deleted file mode 100644
index 5234daab..00000000
--- a/Assets/Scripts/Unit/UnitRootMotion.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-#if UNITY_EDITOR
-using UnityEditor;
-#endif
-
-// 同步root motion到角色根节点
-[DisallowMultipleComponent]
-public class UnitRootMotion : UnitComponent
-{
- RootMotionData m_RootMotionData;
-
- 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()
- {
- m_PrevNormalTime = 0;
- }
-
- public override void OnUpdate()
- {
- base.OnUpdate();
-
- var state = m_Owner.unitAnimation.curState;
- float playbackTime = m_Owner.unitAnimation.playbackTime;
-
- var rootMotion = m_RootMotionDic[state];
- float normalTime = (playbackTime % rootMotion.animationLength) / rootMotion.animationLength;
-
- if (m_PrevNormalTime > normalTime)
- m_PrevNormalTime = 0;
-
- m_Owner.transform.position += rootMotion.GetRootMotionDistance(m_PrevNormalTime, normalTime);
- m_PrevNormalTime = normalTime;
- }
-
- public void SetUpRootMotion(string unitFolder, UnitActionData actions)
- {
- if (actions == null)
- return;
-
- foreach (var action in actions.actions)
- {
-#if UNITY_EDITOR
- AnimationClip clip = action.Value;
- string name = clip.name;
- string path = unitFolder + "RootMotion/" + name + ".asset";
- RootMotionData data = AssetDatabase.LoadAssetAtPath<RootMotionData>(path);
- m_RootMotionDic.Add(action.Key, data);
-#endif
- }
- }
-
-#else
-
- public override void OnUpdate()
- {
- base.OnUpdate();
- }
-
- public void OnAnimationChange()
- {
- m_PrevAnimationData = null;
- }
-
- public void UpdateRootMotion()
- {
- 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;
- }
- if (m_PrevFrame > frame)
- m_PrevFrame = frame;
- Vector3 dest = rmData.GetRootMotionDistance(m_PrevFrame, frame);
- Vector3 realDest = m_Owner.transform.rotation * dest;
- if(animData.GetProperty(EAnimationProperty.ORMEnforcement) != 0)
- {
- if(m_Owner.transform.position.y + realDest.y < 0)
- realDest.y = 0;
- }
- m_Owner.transform.position += realDest;
-
- 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;
- bool ignoreY = m_Owner.unitAnimation.baseLayer.animationData.GetProperty(EAnimationProperty.IgnoreY, 0) != 0;
- if (state.IsTag("IgnoreY") || ignoreY)
- {
- dest.y = 0;
- }
- //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
- m_Owner.transform.position += dest;
- }
- }
-
-#endif
-
-} \ No newline at end of file