diff options
Diffstat (limited to 'Assets/ActionTool')
-rw-r--r-- | Assets/ActionTool/Editor/ActionData.cs | 12 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionManager.cs | 4 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionPreviewEditor.cs | 53 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/ActionToolSettingsEditor.cs | 2 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/AnimationCurveEditor.cs | 54 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/AnimationCurveEditor.cs.meta | 11 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/AnimationToggleEditor.cs | 69 | ||||
-rw-r--r-- | Assets/ActionTool/Editor/AnimationToggleEditor.cs.meta | 11 |
8 files changed, 201 insertions, 15 deletions
diff --git a/Assets/ActionTool/Editor/ActionData.cs b/Assets/ActionTool/Editor/ActionData.cs index 6993b378..600eccc5 100644 --- a/Assets/ActionTool/Editor/ActionData.cs +++ b/Assets/ActionTool/Editor/ActionData.cs @@ -20,7 +20,7 @@ namespace ActionTool private AnimationEventBase m_CurEventInfo; // 当前正在编辑的event
- private UnitTimeline m_Timeline;
+ private TimelineEventProxy m_TimelineEventProxy;
#region metadata
private float m_TotalFrame; //timeline采样的总帧数
@@ -82,7 +82,7 @@ namespace ActionTool m_PrevLocalTime = 0;
m_Animator.Play(kStateName, 0, 0);
m_RootMotion = rootmotion;
- m_Timeline = m_Animator.gameObject.GetOrAddComponent<UnitTimeline>();
+ m_TimelineEventProxy = new TimelineEventProxy(animator.gameObject.transform);
}
public void SetCurrentAnimTime(float time)
@@ -161,7 +161,7 @@ namespace ActionTool AnimationData animData = ActionManager.animationData;
if (animData)
{
- AnimationCurve curve = animData.curve;
+ AnimationCurve curve = animData.speedCurve;
deltaFrame *= curve.Evaluate(normalizeTime);
}
}
@@ -220,11 +220,11 @@ namespace ActionTool public void RunEvent()
{
- if (m_Timeline != null)
- m_Timeline.ExecuteAnimationEvents(ActionManager.animationData, m_CurAnimFrame);
+ if (m_TimelineEventProxy != null)
+ m_TimelineEventProxy.ExecuteAnimationEvents(ActionManager.animationData, m_CurAnimFrame);
}
- public void CreateEvent(UnitTimeline.EEventType eventtype, int startFrame)
+ public void CreateEvent(TimelineEventProxy.EEventType eventtype, int startFrame)
{
var classes = Assembly
.GetAssembly(typeof(AnimationEventBase))
diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs index deb7e3a1..af3935a7 100644 --- a/Assets/ActionTool/Editor/ActionManager.cs +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -435,7 +435,7 @@ namespace ActionTool public static void AddNewEvent(object param)
{
EventParam eventParam = (EventParam )param;
- string eventName = eventParam.eventName; // UnitTimeline.EEventType
+ string eventName = eventParam.eventName; // TimelineEventProxy.EEventType
int frame = eventParam.frame;
Debug.Log("[ActionTool] Add new event " + eventName);
if (animationData == null)
@@ -443,7 +443,7 @@ namespace ActionTool Debug.LogError("[ActionTool] 没有animation data数据");
return;
}
- Type type = UnitTimeline.GetTypeByName(eventName);
+ Type type = TimelineEventProxy.GetTypeByName(eventName);
if(type == null)
{
Debug.LogError("[ActionTool] 没有创建对应的类, " + eventName);
diff --git a/Assets/ActionTool/Editor/ActionPreviewEditor.cs b/Assets/ActionTool/Editor/ActionPreviewEditor.cs index dc855fad..32731deb 100644 --- a/Assets/ActionTool/Editor/ActionPreviewEditor.cs +++ b/Assets/ActionTool/Editor/ActionPreviewEditor.cs @@ -102,7 +102,10 @@ namespace ActionTool float y = kToolbarHeight + 5;
GUI_Detail(ref y);
+ GUI_Toggle(ref y);
+ GUI_Curves(ref y);
GUI_Curve(ref y);
+ y += 5;
GUI_Setting(ref y);
GUI_TimeLineView(ref y);
}
@@ -293,19 +296,57 @@ namespace ActionTool float x = 5;
GUI.Label(new Rect(x, y, 105, 15), "Speed Curve:", styles.textMiddle);
x += 105;
- animData.curve = EditorGUI.CurveField(new Rect(x, y, 210, 15), animData.curve);
+ animData.speedCurve = EditorGUI.CurveField(new Rect(x, y, 210, 15), animData.speedCurve);
ui.DrawVerticalLineFast(x + 210 * ActionManager.actionData.curAnimTimeNormal, y , y + 15, Color.red);
- y += 20;
+ y += 15;
}
- void GUI_Setting(ref float y)
+ void GUI_Toggle(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+ var toggles = animData.toggles;
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Toggles:", styles.textMiddle);
+ x += 105;
+ GUI.Label(new Rect(x, y, 10, 15), (toggles != null ? toggles.Count : 0).ToString(), styles.textMiddleBold);
+ //if(toggles != null && toggles.Count > 0)
+ //{
+ x += 20;
+ if(GUI.Button(new Rect(x, y, 50, 15), "Edit"))
+ {
+ EditorWindow.GetWindow<AnimationToggleEditor>(true);
+ }
+ //}
+ y += 15;
+ }
+ void GUI_Curves(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+ var curves = animData.curves;
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Curves:", styles.textMiddle);
+ x += 105;
+ GUI.Label(new Rect(x, y, 10, 15), (curves != null ? curves.Count : 0).ToString(), styles.textMiddleBold);
+ x += 20;
+ if (GUI.Button(new Rect(x, y, 50, 15), "Edit"))
+ {
+ EditorWindow.GetWindow<AnimationCurveEditor>(true);
+ }
+ y += 15;
+ }
+
+ void GUI_Setting(ref float y)
{
ActionData action = ActionManager.actionData;
float x = 5;
action.applyRootMotion = GUI.Toggle(new Rect(x, y, 120, 15), action.applyRootMotion, "Apply RootMotion", styles.toggleSmallBold);
x += 130;
- action.applyCurve = GUI.Toggle(new Rect(x, y, 120, 15), action.applyCurve, "Apply Curve", styles.toggleSmallBold);
+ action.applyCurve = GUI.Toggle(new Rect(x, y, 120, 15), action.applyCurve, "Apply SpeedCurve", styles.toggleSmallBold);
y += 20;
}
@@ -735,7 +776,7 @@ namespace ActionTool ActionData action = ActionManager.actionData;
Vector2 position = Event.current.mousePosition;
- Rect eventRegion = new Rect(kTimeLineViewXOffset, m_GridY, action.totalFrame * kFrameWidth, UnitTimeline.kMaxEventsPerFrame * kFrameHeight);
+ Rect eventRegion = new Rect(kTimeLineViewXOffset, m_GridY, action.totalFrame * kFrameWidth, TimelineEventProxy.kMaxEventsPerFrame * kFrameHeight);
if (!eventRegion.Contains(position))
return;
@@ -743,7 +784,7 @@ namespace ActionTool int frame = (int)(pos.x / kFrameWidth);
GenericMenu eventMenu = new GenericMenu();
- foreach(var name in Enum.GetNames(typeof(UnitTimeline.EEventType)))
+ foreach(var name in Enum.GetNames(typeof(TimelineEventProxy.EEventType)))
{
GUIContent item = null;
string shortName = name.Replace("Event", "");
diff --git a/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs b/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs index 2afde647..c35688dd 100644 --- a/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs +++ b/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs @@ -35,7 +35,7 @@ public class ActionToolSettingsEditor : Editor EditorGUI.BeginChangeCheck();
- foreach (var name in Enum.GetNames(typeof(UnitTimeline.EEventType)))
+ foreach (var name in Enum.GetNames(typeof(TimelineEventProxy.EEventType)))
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(name);
diff --git a/Assets/ActionTool/Editor/AnimationCurveEditor.cs b/Assets/ActionTool/Editor/AnimationCurveEditor.cs new file mode 100644 index 00000000..fe19d2cf --- /dev/null +++ b/Assets/ActionTool/Editor/AnimationCurveEditor.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace ActionTool +{ + + [CustomPropertyDrawer(typeof(CurveDictionary))] + public class CurveDictionaryDrawer : SerializableDictionaryPropertyDrawer { } + + public class AnimationCurveEditor : EditorWindow + { + + SerializedObject obj; + + private void OnEnable() + { + titleContent = new GUIContent("Curves"); + maxSize = new Vector2(300, 200); + minSize = maxSize; + } + + private void OnDisable() + { + } + + private void Update() + { + } + + private void OnGUI() + { + AnimationData animData = ActionManager.animationData; + if (animData == null) + { + this.Close(); + return; + } + + if (obj == null || obj.targetObject != animData) + { + obj = new SerializedObject(animData); + } + + var curves = obj.FindProperty("curves"); + EditorGUILayout.PropertyField(curves, true); + if (obj.ApplyModifiedProperties()) + { + } + } + } + +} diff --git a/Assets/ActionTool/Editor/AnimationCurveEditor.cs.meta b/Assets/ActionTool/Editor/AnimationCurveEditor.cs.meta new file mode 100644 index 00000000..fb35d0db --- /dev/null +++ b/Assets/ActionTool/Editor/AnimationCurveEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9fc645a569609847964fd93876b8d5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ActionTool/Editor/AnimationToggleEditor.cs b/Assets/ActionTool/Editor/AnimationToggleEditor.cs new file mode 100644 index 00000000..fc153567 --- /dev/null +++ b/Assets/ActionTool/Editor/AnimationToggleEditor.cs @@ -0,0 +1,69 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace ActionTool +{ + + + [CustomPropertyDrawer(typeof(ToggleTimeDictionary))] + public class ToggleTimeDictionaryDrawer : SerializableDictionaryPropertyDrawer { } + + public class AnimationToggleEditor : EditorWindow + { + + SerializedObject obj; + + private void OnEnable() + { + titleContent = new GUIContent("Toggles"); + maxSize = new Vector2(300, 200); + minSize = maxSize; + } + + private void OnDisable() + { + } + + private void Update() + { + } + + private void OnGUI() + { + AnimationData animData = ActionManager.animationData; + if (animData == null) + { + this.Close(); + return; + } + + if (obj == null || obj.targetObject != animData) + { + obj = new SerializedObject(animData); + } + + var toggles = obj.FindProperty("toggles"); + EditorGUILayout.PropertyField(toggles, true); + + if(obj.ApplyModifiedProperties()) + { + if (animData.toggles != null && animData.toggles.Count > 0) + { + List<EAnimationToogle> keys = new List<EAnimationToogle>(animData.toggles.Keys); + for(int i = 0; i < keys.Count; ++i) + { + Vector2 minMax = animData.toggles[keys[i]]; + minMax.x = Mathf.Clamp(minMax.x, 0, 1); + minMax.y = Mathf.Clamp(minMax.y, 0, 1); + minMax.x = Mathf.Clamp(minMax.x, 0, minMax.y); + minMax.y = Mathf.Clamp(minMax.y, minMax.x, 1); + animData.toggles[keys[i]] = minMax; + } + } + } + } + } + +} diff --git a/Assets/ActionTool/Editor/AnimationToggleEditor.cs.meta b/Assets/ActionTool/Editor/AnimationToggleEditor.cs.meta new file mode 100644 index 00000000..2be25d40 --- /dev/null +++ b/Assets/ActionTool/Editor/AnimationToggleEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11f79c8cc79fb9e449a43bf66fd1c8f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |