summaryrefslogtreecommitdiff
path: root/Assets/UI_Extension/Editor
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-05-08 23:15:13 +0800
committerchai <chaifix@163.com>2021-05-08 23:15:13 +0800
commitd07e14add74e017b52ab2371efeea1aa4ea10ced (patch)
treeefd07869326e4c428f5bfe43fad0c2583d32a401 /Assets/UI_Extension/Editor
+init
Diffstat (limited to 'Assets/UI_Extension/Editor')
-rw-r--r--Assets/UI_Extension/Editor/GUIUtils.cs37
-rw-r--r--Assets/UI_Extension/Editor/GUIUtils.cs.meta11
-rw-r--r--Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs92
-rw-r--r--Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs.meta11
-rw-r--r--Assets/UI_Extension/Editor/MenuOptions.cs123
-rw-r--r--Assets/UI_Extension/Editor/MenuOptions.cs.meta11
6 files changed, 285 insertions, 0 deletions
diff --git a/Assets/UI_Extension/Editor/GUIUtils.cs b/Assets/UI_Extension/Editor/GUIUtils.cs
new file mode 100644
index 0000000..5b881c6
--- /dev/null
+++ b/Assets/UI_Extension/Editor/GUIUtils.cs
@@ -0,0 +1,37 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace UIExt
+{
+ internal static class GUIUtils
+ {
+
+ public static void DrawLine()
+ {
+
+ }
+
+ public static void DrawHorizontalline(Color color, Vector2 left, float length, int thickness = 1, int padding = 0)
+ {
+ Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(padding + thickness));
+ r.x = left.x;
+ r.y = left.y;
+ r.width = length;
+ EditorGUI.DrawRect(r, color);
+ GUILayout.Space(-10f);
+ }
+
+ public static void DrawVerticleline(Color color, Vector2 top, float height, int thickness = 1, int padding = 0)
+ {
+ Rect r = EditorGUILayout.GetControlRect(GUILayout.Width(padding + thickness));
+ r.x = top.x;
+ r.y = top.y;
+ r.height = height;
+ EditorGUI.DrawRect(r, color);
+ GUILayout.Space(-10f);
+ }
+
+ }
+}
diff --git a/Assets/UI_Extension/Editor/GUIUtils.cs.meta b/Assets/UI_Extension/Editor/GUIUtils.cs.meta
new file mode 100644
index 0000000..17c2a95
--- /dev/null
+++ b/Assets/UI_Extension/Editor/GUIUtils.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 55d8d3929dc3359478987801df05899a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs b/Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs
new file mode 100644
index 0000000..5feb223
--- /dev/null
+++ b/Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs
@@ -0,0 +1,92 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEngine.UI;
+
+namespace UIExt
+{
+
+ [CustomEditor(typeof(GridLayoutGroupExt), false)]
+ public class GridLayoutGroupExtEdtor : Editor
+ {
+ GridLayoutGroupExt layout;
+
+ SerializedProperty m_Padding;
+ SerializedProperty m_ScrollMode;
+ SerializedProperty m_MovementType;
+
+ static Color s_LightGray = new Color(0.7f, 0.7f, 0.7f, 1);
+
+ int m_ItemCount; // 测试
+ float m_HorizontalScrollAmount;
+ float m_VerticalScrollAmount;
+
+ protected virtual void OnEnable()
+ {
+ m_ItemCount = 0;
+ m_Padding = serializedObject.FindProperty("m_Padding");
+ m_ScrollMode = serializedObject.FindProperty("m_ScrollMode");
+ m_MovementType = serializedObject.FindProperty("m_MovementType");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ GUI.changed = false;
+ layout = this.target as GridLayoutGroupExt;
+ if (layout == null)
+ return;
+ GUILayout.Space(10f);
+ EditorGUILayout.BeginVertical();
+
+ layout.scrollRect = EditorGUILayout.ObjectField("Scroll Rect", layout.scrollRect, typeof(ScrollRect), true) as ScrollRect;
+ layout.content = EditorGUILayout.ObjectField("Content", layout.content, typeof(RectTransform), true) as RectTransform;
+ layout.itemTemplate = EditorGUILayout.ObjectField("Item Template", layout.itemTemplate, typeof(LayoutItem), true) as LayoutItem;
+
+ layout.cellSize = EditorGUILayout.Vector2IntField("Cell Size", layout.cellSize);
+ layout.spacing = EditorGUILayout.Vector2IntField("Spacing", layout.spacing);
+ EditorGUILayout.PropertyField(m_Padding, true);
+
+ layout.rowCount = EditorGUILayout.IntField("Row Count", layout.rowCount);
+ layout.columCount = EditorGUILayout.IntField("Colum Count", layout.columCount);
+
+ EditorGUILayout.PropertyField(m_ScrollMode, true);
+ EditorGUILayout.PropertyField(m_MovementType, true);
+
+ GUILayout.Space(5f);
+
+ float y = EditorGUILayout.GetControlRect().y;
+ float x = EditorGUILayout.GetControlRect().x;
+ float w = EditorGUILayout.GetControlRect().width;
+ EditorGUI.DrawRect(new Rect(x, y, w, 95), s_LightGray);
+ GUILayout.Space(-50);
+
+ var centeredStyle = GUI.skin.GetStyle("Label");
+ centeredStyle.alignment = TextAnchor.UpperCenter;
+ GUILayout.Label("测试", centeredStyle);
+ Rect rect = EditorGUILayout.GetControlRect();
+ GUIUtils.DrawHorizontalline(Color.gray, new Vector2(rect.x, rect.y), rect.width);
+ EditorGUILayout.BeginHorizontal();
+ m_ItemCount = EditorGUILayout.IntSlider("测试生成Item数量", m_ItemCount, 0, 50);
+ if(GUILayout.Button("生成", GUILayout.Width(40)))
+ {
+
+ }
+ EditorGUILayout.EndHorizontal();
+
+ m_HorizontalScrollAmount = EditorGUILayout.Slider("水平滑动值", m_HorizontalScrollAmount, 0, 1000);
+ m_VerticalScrollAmount = EditorGUILayout.Slider("垂直滑动值", m_VerticalScrollAmount, 0, 1000);
+
+ GUILayout.Space(20f);
+ EditorGUILayout.EndVertical();
+ if(GUI.changed)
+ {
+ EditorUtility.SetDirty(layout);
+ }
+ }
+
+
+
+ }
+
+}
diff --git a/Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs.meta b/Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs.meta
new file mode 100644
index 0000000..81fb941
--- /dev/null
+++ b/Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 52a853591b77ef04198d0a2b5afa64e7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UI_Extension/Editor/MenuOptions.cs b/Assets/UI_Extension/Editor/MenuOptions.cs
new file mode 100644
index 0000000..2eef47e
--- /dev/null
+++ b/Assets/UI_Extension/Editor/MenuOptions.cs
@@ -0,0 +1,123 @@
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+
+namespace UIExt
+{
+ static internal class MenuOptions
+ {
+
+ [MenuItem("GameObject/UI Extensions/GridLayoutGroupExt", false,2000)]
+ static public void AddGridLayoutGroupExt(MenuCommand menuCommand)
+ {
+ Debug.Log("AddGridLayoutGroupExt");
+ }
+
+ //[MenuItem("GameObject/UI/Button", false, 2030)]
+ //static public void AddButton(MenuCommand menuCommand)
+ //{
+ // //GameObject go = DefaultControls.CreateButton(GetStandardResources());
+ // //PlaceUIElementRoot(go, menuCommand);
+ //}
+
+ //private static void PlaceUIElementRoot(GameObject element, MenuCommand menuCommand)
+ //{
+ // GameObject parent = menuCommand.context as GameObject;
+ // if (parent == null || parent.GetComponentInParent<Canvas>() == null)
+ // {
+ // parent = GetOrCreateCanvasGameObject();
+ // }
+
+ // string uniqueName = GameObjectUtility.GetUniqueNameForSibling(parent.transform, element.name);
+ // element.name = uniqueName;
+ // Undo.RegisterCreatedObjectUndo(element, "Create " + element.name);
+ // Undo.SetTransformParent(element.transform, parent.transform, "Parent " + element.name);
+ // GameObjectUtility.SetParentAndAlign(element, parent);
+ // if (parent != menuCommand.context) // not a context click, so center in sceneview
+ // SetPositionVisibleinSceneView(parent.GetComponent<RectTransform>(), element.GetComponent<RectTransform>());
+
+ // Selection.activeGameObject = element;
+ //}
+
+ //private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform)
+ //{
+ // // Find the best scene view
+ // SceneView sceneView = SceneView.lastActiveSceneView;
+ // if (sceneView == null && SceneView.sceneViews.Count > 0)
+ // sceneView = SceneView.sceneViews[0] as SceneView;
+
+ // // Couldn't find a SceneView. Don't set position.
+ // if (sceneView == null || sceneView.camera == null)
+ // return;
+
+ // // Create world space Plane from canvas position.
+ // Vector2 localPlanePosition;
+ // Camera camera = sceneView.camera;
+ // Vector3 position = Vector3.zero;
+ // if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out localPlanePosition))
+ // {
+ // // Adjust for canvas pivot
+ // localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x;
+ // localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y;
+
+ // localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x);
+ // localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y);
+
+ // // Adjust for anchoring
+ // position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x;
+ // position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y;
+
+ // Vector3 minLocalPosition;
+ // minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x;
+ // minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y;
+
+ // Vector3 maxLocalPosition;
+ // maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x;
+ // maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y;
+
+ // position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x);
+ // position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y);
+ // }
+
+ // itemTransform.anchoredPosition = position;
+ // itemTransform.localRotation = Quaternion.identity;
+ // itemTransform.localScale = Vector3.one;
+ //}
+
+ //// Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas.
+ //static public GameObject GetOrCreateCanvasGameObject()
+ //{
+ // GameObject selectedGo = Selection.activeGameObject;
+
+ // // Try to find a gameobject that is the selected GO or one if its parents.
+ // Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent<Canvas>() : null;
+ // if (canvas != null && canvas.gameObject.activeInHierarchy)
+ // return canvas.gameObject;
+
+ // // No canvas in selection or its parents? Then use just any canvas..
+ // canvas = Object.FindObjectOfType(typeof(Canvas)) as Canvas;
+ // if (canvas != null && canvas.gameObject.activeInHierarchy)
+ // return canvas.gameObject;
+
+ // // No canvas in the scene at all? Then create a new one.
+ // return MenuOptions.CreateNewUI();
+ //}
+ //static public GameObject CreateNewUI()
+ //{
+ // // Root for the UI
+ // var root = new GameObject("Canvas");
+ // root.layer = LayerMask.NameToLayer(kUILayerName);
+ // Canvas canvas = root.AddComponent<Canvas>();
+ // canvas.renderMode = RenderMode.ScreenSpaceOverlay;
+ // root.AddComponent<CanvasScaler>();
+ // root.AddComponent<GraphicRaycaster>();
+ // Undo.RegisterCreatedObjectUndo(root, "Create " + root.name);
+
+ // // if there is no event system add one...
+ // CreateEventSystem(false);
+ // return root;
+ //}
+ }
+
+} \ No newline at end of file
diff --git a/Assets/UI_Extension/Editor/MenuOptions.cs.meta b/Assets/UI_Extension/Editor/MenuOptions.cs.meta
new file mode 100644
index 0000000..f829f14
--- /dev/null
+++ b/Assets/UI_Extension/Editor/MenuOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71e1e3c5ea5985c4ea6fda0c03331bd7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: