summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assets/ActionTool/Editor/ActionData.cs17
-rw-r--r--Assets/ActionTool/Editor/ActionManager.cs29
-rw-r--r--Assets/ActionTool/Editor/ActionRootMotionEditor.cs4
3 files changed, 30 insertions, 20 deletions
diff --git a/Assets/ActionTool/Editor/ActionData.cs b/Assets/ActionTool/Editor/ActionData.cs
index 13324342..3da31388 100644
--- a/Assets/ActionTool/Editor/ActionData.cs
+++ b/Assets/ActionTool/Editor/ActionData.cs
@@ -89,7 +89,7 @@ namespace ActionTool
m_Animator.Play(kStateName, 0, 0);
m_RootMotion = rootmotion;
- m_TimelineEventProxy = new TimelineEventProxy(animator.gameObject.transform);
+ m_TimelineEventProxy = new TimelineEventProxy(ActionManager.unitRoot.transform);
m_TimelineEventProxy.isInEditMode = true;
m_TimelineEventProxy.registerProjectile = RegisterProjectile;
m_TimelineEventProxy.registerParticleSystem = RegisterParticleSystem;
@@ -182,8 +182,7 @@ namespace ActionTool
if (m_CurAnimFrame > m_TotalFrame)
{
- m_Animator.transform.position = ActionManager.s_InitPosition;
- m_Animator.transform.rotation = ActionManager.s_InitRotation;
+ ActionManager.ResetUnitRootPosAndRot();
m_PrevNormalTime = 0;
}
m_CurAnimFrame %= m_TotalFrame;
@@ -217,20 +216,14 @@ namespace ActionTool
if(!overrideRM && m_RootMotion)
{
-#if true
// Action Tool这里需要转换一下root motion的轴
- m_Animator.transform.position = RootMotionUtility.ExchangeXZ(m_RootMotion.GetRootMotion(normalizeTime));
-#else
- Vector3 dis = m_RootMotion.GetRootMotionDistance(m_PrevNormalTime, normalizeTime);
- m_Animator.transform.position += RootMotionUtility.ExchangeXZ(dis);
- m_PrevNormalTime = normalizeTime;
-#endif
+ ActionManager.unitRoot.transform.position = RootMotionUtility.ExchangeXZ(m_RootMotion.GetRootMotion(normalizeTime));
}
else if(overrideRM)
{
if(!ActionRootMotionEditor.IsRecord)
{
- m_Animator.transform.position = animData.rootMotionOverrideData.GetPosition(m_CurAnimFrame);
+ ActionManager.unitRoot.transform.position = animData.rootMotionOverrideData.GetPosition(m_CurAnimFrame);
}
else // 只在第一次播到这一帧的时候设置位置,否则场景里没法编辑位置
{
@@ -238,7 +231,7 @@ namespace ActionTool
normalizeTime = curAnimEventFrame / m_TotalFrame;
if (curAnimEventFrame != m_PrevAnimEventFrame)
{
- m_Animator.transform.position = animData.rootMotionOverrideData.GetPosition(curAnimEventFrame);
+ ActionManager.unitRoot.transform.position = animData.rootMotionOverrideData.GetPosition(curAnimEventFrame);
}
m_PrevAnimEventFrame = curAnimEventFrame;
}
diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs
index 54322cd6..cb0d5d71 100644
--- a/Assets/ActionTool/Editor/ActionManager.cs
+++ b/Assets/ActionTool/Editor/ActionManager.cs
@@ -59,6 +59,7 @@ namespace ActionTool
private static GameObject s_CurrentUnit;
private static string s_CurrentAnimationName;
public static GameObject unitInstance { get { return s_UnitInstance; } }
+ public static GameObject unitRoot { get; private set; }
private static GameObject s_UnitInstance;
private static Animator s_Animator;
private static AnimatorOverrideController s_OverrideContorller;
@@ -67,8 +68,7 @@ namespace ActionTool
public static ActionData actionData { get { return s_CurActionData; } }
public static Vector3 s_InitPosition = Vector3.zero;
-
- public static Quaternion s_InitRotation = Quaternion.Euler(0,90,0);
+ public static Quaternion s_InitRotation = Quaternion.identity;
private static RootMotionData s_RootMotion;
@@ -119,6 +119,7 @@ namespace ActionTool
private static GameObject s_RootActionTool;
private const string kRootActionTool = "RootActionTool";
+ private const string kUnitRoot = "UnitRoot";
private static AnimationEventBase copiedAnimationEvent;
@@ -236,14 +237,23 @@ namespace ActionTool
if (unit == null)
return;
- unit.transform.position = s_InitPosition;
- unit.transform.rotation = s_InitRotation;
+ unit.transform.position = Vector3.zero;
+ unit.transform.rotation = Quaternion.Euler(0, 90, 0);
+
+ var tempUnitRoot = GameObject.Find(kUnitRoot);
+ if (tempUnitRoot)
+ GameObject.DestroyImmediate(tempUnitRoot);
+ unitRoot = new GameObject(kUnitRoot);
+ unitRoot.transform.localScale = Vector3.one;
+ unitRoot.transform.rotation = s_InitRotation;
+ unitRoot.transform.position = s_InitPosition;
+ unit.transform.SetParent(unitRoot.transform);
s_RootActionTool = GameObject.Find(kRootActionTool);
if(s_RootActionTool == null)
s_RootActionTool = new GameObject(kRootActionTool);
- unit.transform.SetParent(s_RootActionTool.transform);
+ unitRoot.transform.SetParent(s_RootActionTool.transform);
s_Animator = unit.GetComponentInChildren<Animator>();
if(s_Animator == null)
@@ -265,7 +275,7 @@ namespace ActionTool
s_Animator.applyRootMotion = false;
- s_Gizmos = unit.AddComponent<ActionToolGizmos>();
+ s_Gizmos = s_RootActionTool.AddComponent<ActionToolGizmos>();
Settings = AssetDatabase.LoadAssetAtPath<ActionToolSettings>(s_SettingPath);
}
@@ -526,5 +536,12 @@ namespace ActionTool
{
copiedAnimationEvent = UnityEngine.Object.Instantiate(animEvent);
}
+
+ public static void ResetUnitRootPosAndRot()
+ {
+ unitRoot.transform.position = s_InitPosition;
+ unitRoot.transform.rotation = s_InitRotation;
+ }
+
}
} \ No newline at end of file
diff --git a/Assets/ActionTool/Editor/ActionRootMotionEditor.cs b/Assets/ActionTool/Editor/ActionRootMotionEditor.cs
index 020c86b6..eb076fc3 100644
--- a/Assets/ActionTool/Editor/ActionRootMotionEditor.cs
+++ b/Assets/ActionTool/Editor/ActionRootMotionEditor.cs
@@ -70,7 +70,7 @@ namespace ActionTool
GUI_TakeRecord(ref x, ref y);
GUI_Delete(ref x, ref y);
GUI.enabled = false;
- EditorGUI.Vector3Field(new Rect(0, kToolbarHeight, position.width, 20), "Position: ", ActionManager.unitInstance.transform.position);
+ EditorGUI.Vector3Field(new Rect(0, kToolbarHeight, position.width, 20), "Position: ", ActionManager.unitRoot.transform.position);
GUI.enabled = true;
}
@@ -90,7 +90,7 @@ namespace ActionTool
Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.AddKeyframe", "Key Frame")))
{
- Vector3 pos = ActionManager.unitInstance.transform.position;
+ Vector3 pos = ActionManager.unitRoot.transform.position;
int frame = (int)ActionManager.actionData.curAnimFrame;
ActionManager.animationData.rootMotionOverrideData.SetPosition(frame, pos);
ActionManager.PreviewWindow.Repaint();