summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assets/ActionTool/Editor/ActionColliderEditor.cs169
-rw-r--r--Assets/ActionTool/Editor/ActionColliderEditor.cs.meta2
-rw-r--r--Assets/ActionTool/Editor/ActionColliderFrameEditor.cs82
-rw-r--r--Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta11
-rw-r--r--Assets/ActionTool/Editor/ActionManager.cs14
-rw-r--r--Assets/ActionTool/Editor/ActionPreviewEditor.cs3
-rw-r--r--Assets/Bundle/Unit/PC/Erika/AnimationData/Take 001.asset48
-rw-r--r--Assets/Scripts/Unit/Collider/ColliderBox.cs24
-rw-r--r--Assets/Scripts/Unit/Collider/ColliderData.cs11
-rw-r--r--Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs14
-rw-r--r--Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/Editor/AnimationDataInspector.cs26
-rw-r--r--Assets/Scripts/Utils/DisallowModifiyInGUI.cs9
-rw-r--r--Assets/Scripts/Utils/DisallowModifiyInGUI.cs.meta11
14 files changed, 349 insertions, 86 deletions
diff --git a/Assets/ActionTool/Editor/ActionColliderEditor.cs b/Assets/ActionTool/Editor/ActionColliderEditor.cs
index d75fd8fc..346cadbc 100644
--- a/Assets/ActionTool/Editor/ActionColliderEditor.cs
+++ b/Assets/ActionTool/Editor/ActionColliderEditor.cs
@@ -1,82 +1,149 @@
-using System.Collections;
+using System;
+using System.Collections;
using System.Collections.Generic;
+using System.Reflection;
using UnityEngine;
using UnityEditor;
namespace ActionTool
{
- // 编辑collider帧
+ // 编辑事件
public class ActionColliderEditor : EditorWindow
{
- EditorWindow sceneView;
+ EditorWindow sceneView;
+ ActionEditorStyles styles;
+
+ ColliderBox collider;
private void OnEnable()
{
- titleContent = new GUIContent("Collider Editor");
- maxSize = new Vector2(300, 150);
- minSize = maxSize;
-
- if(!sceneView)
- sceneView = EditorWindow.GetWindow<SceneView>();
- }
-
- private void OnDisable()
+ titleContent = new GUIContent("Collider Editor");
+ }
+
+ private void OnDisable()
{
- // sceneView = null;
- ActionManager.OnSelectColliderFrame(null);
}
- private void Update()
- {
- }
+ private void Update()
+ {
+ }
- private void OnGUI()
+ Vector2 scroll;
+ private void OnGUI()
{
- var frame = ActionManager.editColliderFrame;
- if (frame == null)
+ if (ActionManager.colliderData == null)
{
this.Close();
return;
}
- GUI.changed = false;
+ collider = ActionManager.colliderData.collider;
+ if (collider == null)
+ return;
- GUILayout.Space(5);
+ if (styles == null) styles = ActionEditorStyles.Get();
- EditorGUILayout.BeginHorizontal();
- EditorGUILayout.LabelField("frame: ");
- EditorGUILayout.LabelField(frame.frame.ToString());
- EditorGUILayout.EndHorizontal();
+ GUILayout.Space(2);
- EditorGUILayout.BeginHorizontal();
- EditorGUILayout.LabelField("active: ");
- frame.active = EditorGUILayout.Toggle(frame.active);
- EditorGUILayout.EndHorizontal();
+ scroll = EditorGUILayout.BeginScrollView(scroll);
- EditorGUILayout.LabelField("position: ");
- frame.position = EditorGUILayout.Vector3Field("", frame.position);
+ Type type = collider.GetType();
+ FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
+ if (fields != null && fields.Length > 0)
+ {
+ for (int i = 0; i < fields.Length; ++i)
+ {
+ FieldInfo field = fields[i];
+ string name = field.Name + " (" + field.FieldType.Name + ")";
+ string tooltip = "";
+ bool skip = false;
+ foreach (var attr in field.GetCustomAttributes())
+ {
+ if (attr.GetType() == typeof(TooltipAttribute))
+ {
+ TooltipAttribute tooltipattr = attr as TooltipAttribute;
+ if (tooltip != null)
+ {
+ tooltip = tooltipattr.tooltip;
+ }
+ }
+ else if(attr.GetType() == typeof(DisallowModifiyInGUI))
+ {
+ GUI.enabled = false;
+ }
+ else if(attr.GetType() == typeof(ColliderTypeAttribute))
+ {
+ ColliderTypeAttribute t = attr as ColliderTypeAttribute;
+ if (t.type != collider.type)
+ {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if(skip)
+ {
+ GUI.enabled = true;
+ continue;
+ }
+ EditorGUILayout.LabelField(new GUIContent(name, tooltip), styles.textBold);
+ if (field.FieldType == typeof(Vector3))
+ {
+ field.SetValue(collider, GUI_Vector3((Vector3)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(Vector2))
+ {
+ field.SetValue(collider, GUI_Vector2((Vector2)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(string))
+ {
+ field.SetValue(collider, GUI_String((string)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(bool))
+ {
+ field.SetValue(collider, GUI_Bool((bool)field.GetValue(collider)));
+ }
+ else
+ {
+ GUI_Enum(field.GetValue(collider).ToString());
+ }
+ GUI.enabled = true;
+ GUILayout.Space(5);
+ }
+ }
+ EditorGUILayout.EndScrollView();
+ }
- EditorGUILayout.LabelField("size: ");
- frame.size = EditorGUILayout.Vector3Field("", frame.size);
+ Vector3 GUI_Vector3(Vector3 value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.Vector3Field(rect, "", value);
+ }
- GUILayout.Space(10);
+ Vector2 GUI_Vector2(Vector2 value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.Vector2Field(rect, "", value);
+ }
- Color prevColor = GUI.backgroundColor;
- GUI.backgroundColor = Color.red;
- if (GUILayout.Button("Delete"))
- {
- ActionManager.DeleteCurFrame();
- }
- GUI.backgroundColor = prevColor;
-
- if (GUI.changed)
- {
- if (sceneView != null)
- sceneView.Repaint();
- if (ActionManager.PreviewWindow != null)
- ActionManager.PreviewWindow.Repaint();
- }
+ string GUI_String(string value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.TextField(rect, "", value);
}
+
+ bool GUI_Bool(bool value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return GUI.Toggle(rect, value, "Check");
+ }
+
+ void GUI_Enum(string value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ GUI.Label(rect, value);
+ }
+
}
-} \ No newline at end of file
+} \ No newline at end of file
diff --git a/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta b/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta
index 393c3deb..2fd8e91f 100644
--- a/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta
+++ b/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 3fcd174d4fc741a4986f1a08413e6ada
+guid: 8507f595519bce344b9b7f27fa2f0f32
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs
new file mode 100644
index 00000000..4f716be3
--- /dev/null
+++ b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs
@@ -0,0 +1,82 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ // 编辑collider帧
+ public class ActionColliderFrameEditor : EditorWindow
+ {
+ EditorWindow sceneView;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Collider Frame Editor");
+ maxSize = new Vector2(300, 150);
+ minSize = maxSize;
+
+ if(!sceneView)
+ sceneView = EditorWindow.GetWindow<SceneView>();
+ }
+
+ private void OnDisable()
+ {
+ // sceneView = null;
+ ActionManager.OnSelectColliderFrame(null);
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ var frame = ActionManager.editColliderFrame;
+ if (frame == null)
+ {
+ this.Close();
+ return;
+ }
+
+ GUI.changed = false;
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("frame: ");
+ EditorGUILayout.LabelField(frame.frame.ToString());
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("active: ");
+ frame.active = EditorGUILayout.Toggle(frame.active);
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.LabelField("position: ");
+ frame.position = EditorGUILayout.Vector3Field("", frame.position);
+
+ EditorGUILayout.LabelField("size: ");
+ frame.size = EditorGUILayout.Vector3Field("", frame.size);
+
+ GUILayout.Space(10);
+
+ Color prevColor = GUI.backgroundColor;
+ GUI.backgroundColor = Color.red;
+ if (GUILayout.Button("Delete"))
+ {
+ ActionManager.DeleteCurFrame();
+ }
+ GUI.backgroundColor = prevColor;
+
+ if (GUI.changed)
+ {
+ if (sceneView != null)
+ sceneView.Repaint();
+ if (ActionManager.PreviewWindow != null)
+ ActionManager.PreviewWindow.Repaint();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta
new file mode 100644
index 00000000..393c3deb
--- /dev/null
+++ b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3fcd174d4fc741a4986f1a08413e6ada
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs
index 4fe3138b..7becca02 100644
--- a/Assets/ActionTool/Editor/ActionManager.cs
+++ b/Assets/ActionTool/Editor/ActionManager.cs
@@ -25,6 +25,7 @@ namespace ActionTool
public static ActionEditor AnimationWindow;
public static ActionPreviewEditor PreviewWindow;
public static ActionEventEditor EventEditWindow;
+ public static ActionColliderFrameEditor ColliderFrameWindow;
public static ActionColliderEditor ColliderWindow;
public static ActionToolSettings Settings;
@@ -170,7 +171,7 @@ namespace ActionTool
OnSelectColliderFrame(null);
OnSelectBox(null);
if (EventEditWindow) EventEditWindow.Close();
- if (ColliderWindow) ColliderWindow.Close();
+ if (ColliderFrameWindow) ColliderFrameWindow.Close();
}
public static bool HasSelectObj()
@@ -352,9 +353,18 @@ namespace ActionTool
}
}
+ public static void EditCollider()
+ {
+ if (s_CurColliderData == null)
+ return;
+ ColliderWindow = EditorWindow.GetWindow<ActionColliderEditor>(true);
+ }
+
public static void OnSelectBox(ColliderData collider)
{
s_CurColliderData = collider;
+ if (ColliderWindow != null)
+ ColliderWindow.Repaint();
}
public static void AddNewBoxFrame(object param)
@@ -396,7 +406,7 @@ namespace ActionTool
if (frame != null)
{
- ColliderWindow = EditorWindow.GetWindow<ActionColliderEditor>(true);
+ ColliderFrameWindow = EditorWindow.GetWindow<ActionColliderFrameEditor>(true);
ActionData action = ActionManager.actionData;
float normaltime = frame.frame / action.totalFrame;
diff --git a/Assets/ActionTool/Editor/ActionPreviewEditor.cs b/Assets/ActionTool/Editor/ActionPreviewEditor.cs
index f0a828fc..ecec6dde 100644
--- a/Assets/ActionTool/Editor/ActionPreviewEditor.cs
+++ b/Assets/ActionTool/Editor/ActionPreviewEditor.cs
@@ -475,11 +475,12 @@ namespace ActionTool
void GUI_Toolbar_Detail(ref float x, ref float y)
{
- x += kToolbarControlMargin;
+ x += kToolbarControlMargin + 20;
Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
GUI.enabled = ActionManager.colliderData != null;
if (GUI.Button(rect, new GUIContent(styles.infoIcon, "Detail")))
{
+ ActionManager.EditCollider();
}
GUI.enabled = true;
x += kToolbarControlSize;
diff --git a/Assets/Bundle/Unit/PC/Erika/AnimationData/Take 001.asset b/Assets/Bundle/Unit/PC/Erika/AnimationData/Take 001.asset
index bb83d93a..0de79a47 100644
--- a/Assets/Bundle/Unit/PC/Erika/AnimationData/Take 001.asset
+++ b/Assets/Bundle/Unit/PC/Erika/AnimationData/Take 001.asset
@@ -21,8 +21,12 @@ MonoBehaviour:
- {fileID: 114750047321414068}
- {fileID: 114541332933305096}
hurtBoxes:
- - type: 1
- pivot: 0
+ - collider:
+ type: 1
+ pivot: 0
+ useGravity: 1
+ hitBack: {x: 0, y: 0, z: 0}
+ multiHit: 0
frames:
- frame: 0
active: 1
@@ -81,8 +85,12 @@ MonoBehaviour:
position: {x: 0, y: 0, z: 0}
size: {x: 1, y: 1.3, z: 0.5}
hitBoxes:
- - type: 0
- pivot: 1
+ - collider:
+ type: 0
+ pivot: 0
+ useGravity: 0
+ hitBack: {x: 0, y: 0, z: 0}
+ multiHit: 0
frames:
- frame: 11
active: 1
@@ -92,8 +100,12 @@ MonoBehaviour:
active: 1
position: {x: 0, y: 0.58, z: 1}
size: {x: 1, y: 1, z: 0.5}
- - type: 0
- pivot: 1
+ - collider:
+ type: 0
+ pivot: 0
+ useGravity: 0
+ hitBack: {x: 0, y: 0, z: 0}
+ multiHit: 0
frames:
- frame: 24
active: 1
@@ -103,8 +115,12 @@ MonoBehaviour:
active: 1
position: {x: 0, y: 1.37, z: 1.31}
size: {x: 1, y: 1.62, z: 0.49}
- - type: 0
- pivot: 1
+ - collider:
+ type: 0
+ pivot: 0
+ useGravity: 0
+ hitBack: {x: 0, y: 0, z: 0}
+ multiHit: 0
frames:
- frame: 40
active: 1
@@ -114,8 +130,12 @@ MonoBehaviour:
active: 1
position: {x: 0, y: 0.52, z: 1.08}
size: {x: 1, y: 1.43, z: 0.5}
- - type: 0
- pivot: 1
+ - collider:
+ type: 0
+ pivot: 0
+ useGravity: 0
+ hitBack: {x: 0, y: 0, z: 0}
+ multiHit: 0
frames:
- frame: 44
active: 1
@@ -125,8 +145,12 @@ MonoBehaviour:
active: 1
position: {x: 0, y: 0.3, z: 0.85}
size: {x: 1, y: 1, z: 0.5}
- - type: 0
- pivot: 1
+ - collider:
+ type: 0
+ pivot: 0
+ useGravity: 0
+ hitBack: {x: 0, y: 0, z: 0}
+ multiHit: 0
frames:
- frame: 48
active: 1
diff --git a/Assets/Scripts/Unit/Collider/ColliderBox.cs b/Assets/Scripts/Unit/Collider/ColliderBox.cs
index 5bbce427..9bf2628d 100644
--- a/Assets/Scripts/Unit/Collider/ColliderBox.cs
+++ b/Assets/Scripts/Unit/Collider/ColliderBox.cs
@@ -3,13 +3,17 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+[Serializable]
public class ColliderBox
{
+ // pivot
public enum Pivot
{
MiddleBottom = 0,
MiddleCenter = 1,
}
+
+ // 分化为不同的collider类型
public enum EColliderType
{
HitBox,
@@ -18,8 +22,22 @@ public class ColliderBox
BlockBox,
DefendBox,
}
+
+ [DisallowModifiyInGUI]
public EColliderType type;
- public Vector3 position;
- public Vector3 size;
- public bool active;
+ [DisallowModifiyInGUI]
+ public Pivot pivot;
+
+ #region Hurtbox
+ [ColliderType(EColliderType.HurtBox)]
+ public bool useGravity;
+ #endregion
+
+ #region Hitbox
+ [ColliderType(EColliderType.HitBox)]
+ public Vector3 hitBack;
+ [ColliderType(EColliderType.HitBox)]
+ public bool multiHit;
+ #endregion
+
} \ No newline at end of file
diff --git a/Assets/Scripts/Unit/Collider/ColliderData.cs b/Assets/Scripts/Unit/Collider/ColliderData.cs
index ad4df73f..ad3b7326 100644
--- a/Assets/Scripts/Unit/Collider/ColliderData.cs
+++ b/Assets/Scripts/Unit/Collider/ColliderData.cs
@@ -22,17 +22,20 @@ public class ColliderData
public Vector3 size;
}
- public ColliderBox.EColliderType type;
+ public ColliderBox.EColliderType type { get { return collider.type; } }
+ public ColliderBox.Pivot pivot { get { return collider.pivot; } }
- public ColliderBox.Pivot pivot;
+ public ColliderBox collider;
public List<ColliderFrame> frames;
public ColliderData(ColliderBox.EColliderType type, ColliderBox.Pivot pivot)
{
- this.type = type;
- this.pivot = pivot;
this.frames = new List<ColliderFrame>();
+ if (collider == null)
+ collider = new ColliderBox();
+ collider.type = type;
+ collider.pivot = pivot;
}
public ColliderInfo GetColliderInfo(float frame)
diff --git a/Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs b/Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs
new file mode 100644
index 00000000..7d634b93
--- /dev/null
+++ b/Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ColliderTypeAttribute : Attribute
+{
+ public ColliderTypeAttribute(ColliderBox.EColliderType type)
+ {
+ this.type = type;
+ }
+
+ public ColliderBox.EColliderType type;
+}
diff --git a/Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs.meta b/Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs.meta
new file mode 100644
index 00000000..73ff8d73
--- /dev/null
+++ b/Assets/Scripts/Unit/Collider/ColliderDifferentiationAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9aa9fd1fcb8a10341bbf8b8fdeb54599
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/Editor/AnimationDataInspector.cs b/Assets/Scripts/Unit/Events/Editor/AnimationDataInspector.cs
index 0787e74f..1ca321c8 100644
--- a/Assets/Scripts/Unit/Events/Editor/AnimationDataInspector.cs
+++ b/Assets/Scripts/Unit/Events/Editor/AnimationDataInspector.cs
@@ -20,18 +20,20 @@ public class AnimationDataEditor : Editor
public override void OnInspectorGUI()
{
- if (animData == null)
- return;
- EditorGUI.BeginChangeCheck();
-
- GUILayout.Label("Animation File:");
- GUILayout.TextField(animData.animationName);
-
- if(EditorGUI.EndChangeCheck())
- {
- EditorUtility.SetDirty(animData);
- AssetDatabase.SaveAssets();
- }
+ this.DrawDefaultInspector();
+
+ //if (animData == null)
+ // return;
+ //EditorGUI.BeginChangeCheck();
+
+ //GUILayout.Label("Animation File:");
+ //GUILayout.TextField(animData.animationName);
+
+ //if(EditorGUI.EndChangeCheck())
+ //{
+ // EditorUtility.SetDirty(animData);
+ // AssetDatabase.SaveAssets();
+ //}
}
}
diff --git a/Assets/Scripts/Utils/DisallowModifiyInGUI.cs b/Assets/Scripts/Utils/DisallowModifiyInGUI.cs
new file mode 100644
index 00000000..660d2f0e
--- /dev/null
+++ b/Assets/Scripts/Utils/DisallowModifiyInGUI.cs
@@ -0,0 +1,9 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 有这个标记时表示这个属性是GUI.enabled = false
+public class DisallowModifiyInGUI : Attribute
+{
+}
diff --git a/Assets/Scripts/Utils/DisallowModifiyInGUI.cs.meta b/Assets/Scripts/Utils/DisallowModifiyInGUI.cs.meta
new file mode 100644
index 00000000..afc8de79
--- /dev/null
+++ b/Assets/Scripts/Utils/DisallowModifiyInGUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 28afd9ec15889e540aed85386e9d33f7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: