From d07e14add74e017b52ab2371efeea1aa4ea10ced Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 8 May 2021 23:15:13 +0800 Subject: +init --- Assets/UI_Extension/Editor/GUIUtils.cs | 37 +++++++ Assets/UI_Extension/Editor/GUIUtils.cs.meta | 11 ++ .../Editor/GridLayoutGroupExtEditor.cs | 92 +++++++++++++++ .../Editor/GridLayoutGroupExtEditor.cs.meta | 11 ++ Assets/UI_Extension/Editor/MenuOptions.cs | 123 +++++++++++++++++++++ Assets/UI_Extension/Editor/MenuOptions.cs.meta | 11 ++ 6 files changed, 285 insertions(+) create mode 100644 Assets/UI_Extension/Editor/GUIUtils.cs create mode 100644 Assets/UI_Extension/Editor/GUIUtils.cs.meta create mode 100644 Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs create mode 100644 Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs.meta create mode 100644 Assets/UI_Extension/Editor/MenuOptions.cs create mode 100644 Assets/UI_Extension/Editor/MenuOptions.cs.meta (limited to 'Assets/UI_Extension/Editor') 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() == 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(), element.GetComponent()); + + // 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() : 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.renderMode = RenderMode.ScreenSpaceOverlay; + // root.AddComponent(); + // root.AddComponent(); + // 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: -- cgit v1.1-26-g67d0