diff options
author | chai <chaifix@163.com> | 2021-09-08 19:18:57 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-08 19:18:57 +0800 |
commit | 2fa67922f08ef39b4d70bad001592aedf22c9018 (patch) | |
tree | 5945b091a2651b8350760bdf532e93fcddc96016 /Assets/ActionTool | |
parent | 55d289f8eff1af2d2a2ff02c878faa354dcf6c91 (diff) |
*misc
Diffstat (limited to 'Assets/ActionTool')
-rw-r--r-- | Assets/ActionTool/ActionToolGizmos.cs | 48 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionManager.cs | 1 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionRootMotionEditor.cs | 13 |
3 files changed, 59 insertions, 3 deletions
diff --git a/Assets/ActionTool/ActionToolGizmos.cs b/Assets/ActionTool/ActionToolGizmos.cs index f1d90911..58069527 100644 --- a/Assets/ActionTool/ActionToolGizmos.cs +++ b/Assets/ActionTool/ActionToolGizmos.cs @@ -1,6 +1,7 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+using UnityEditor;
namespace ActionTool
{
@@ -9,13 +10,35 @@ namespace ActionTool {
AnimationData m_AnimationData;
+ AnimationClip m_Clip;
+
+ AnimationClip clip
+ {
+ get
+ {
+ if (m_AnimationData == null)
+ return null;
+ if (m_Clip != null && m_Clip.name == m_AnimationData.animationName)
+ return m_Clip;
+ m_Clip = AssetDatabase.LoadAssetAtPath< AnimationClip>(m_AnimationData.animationPath);
+ return m_Clip;
+ }
+ }
+
float m_CurAnimFrame;
+ bool m_IsShowRootMotion;
+
public void SetAnimationData(AnimationData data)
{
m_AnimationData = data;
}
+ public void ShowRootMotionGizmos(bool show)
+ {
+ m_IsShowRootMotion = show;
+ }
+
public void SetCurAnimFrame(float frame)
{
m_CurAnimFrame = frame;
@@ -26,6 +49,8 @@ namespace ActionTool DrawRoot();
DrawAxis();
DrawColliders();
+
+ DrawRootMotion();
}
void DrawRoot()
@@ -77,7 +102,30 @@ namespace ActionTool }
}
}
+ }
+ void DrawRootMotion()
+ {
+ if (m_AnimationData == null)
+ return;
+ if (!m_AnimationData.overrideRootMotion)
+ return;
+ if (!m_IsShowRootMotion)
+ return;
+ if (clip == null)
+ return;
+ var rm = m_AnimationData.rootMotionOverrideData;
+ float frames = clip.length * AnimationData.FPS;
+ float step = 0.05f;
+ Vector3 prev = rm.GetPosition(0);
+ Vector3 cur = prev;
+ Gizmos.color = Color.white;
+ for (float f = step; f <= frames + step; f+= step)
+ {
+ cur = rm.GetPosition(f);
+ Gizmos.DrawLine(prev, cur);
+ prev = cur;
+ }
}
}
diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs index fd9c15d2..c6599cb7 100644 --- a/Assets/ActionTool/Editor/ActionManager.cs +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -198,6 +198,7 @@ namespace ActionTool OnSelectBox(null);
if (EventEditWindow) EventEditWindow.Close();
if (ColliderFrameWindow) ColliderFrameWindow.Close();
+
}
public static bool HasSelectObj()
diff --git a/Assets/ActionTool/Editor/ActionRootMotionEditor.cs b/Assets/ActionTool/Editor/ActionRootMotionEditor.cs index f6a97efe..020c86b6 100644 --- a/Assets/ActionTool/Editor/ActionRootMotionEditor.cs +++ b/Assets/ActionTool/Editor/ActionRootMotionEditor.cs @@ -38,11 +38,15 @@ namespace ActionTool tex.Apply();
IsRecord = false;
+
+ ActionManager.gizmos.ShowRootMotionGizmos(true);
}
private void OnDisable()
{
IsRecord = false;
+
+ ActionManager.gizmos.ShowRootMotionGizmos(false);
}
private void Update()
@@ -74,7 +78,7 @@ namespace ActionTool {
x += kToolbarControlMargin;
Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
- IsRecord = GUI.Toggle(rect, IsRecord, EditorGUIUtility.IconContent("d_Animation.Record"), GUI.skin.button);
+ IsRecord = GUI.Toggle(rect, IsRecord, EditorGUIUtility.IconContent("d_Animation.Record", "Record"), GUI.skin.button);
x += kToolbarControlSize;
}
@@ -84,17 +88,19 @@ namespace ActionTool GUI.enabled = false;
x += kToolbarControlMargin;
Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
- if (GUI.Button(rect, m_UITextureTakeRecord))
+ if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.AddKeyframe", "Key Frame")))
{
Vector3 pos = ActionManager.unitInstance.transform.position;
int frame = (int)ActionManager.actionData.curAnimFrame;
ActionManager.animationData.rootMotionOverrideData.SetPosition(frame, pos);
ActionManager.PreviewWindow.Repaint();
+ EditorWindow.GetWindow<SceneView>()?.Repaint();
+ SceneView.RepaintAll();
}
GUI.enabled = true;
x += kToolbarControlSize;
}
-
+
void GUI_Delete(ref float x, ref float y)
{
if (!IsRecord)
@@ -110,5 +116,6 @@ namespace ActionTool GUI.enabled = true;
x += kToolbarControlSize;
}
+
}
}
\ No newline at end of file |