diff options
-rw-r--r-- | Assets/ActionTool/Editor/ActionData.cs | 17 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionManager.cs | 29 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionRootMotionEditor.cs | 4 |
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();
|