diff options
Diffstat (limited to 'Assets/UI_Extension/Editor')
-rw-r--r-- | Assets/UI_Extension/Editor/GUIUtils.cs | 37 | ||||
-rw-r--r-- | Assets/UI_Extension/Editor/GUIUtils.cs.meta | 11 | ||||
-rw-r--r-- | Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs | 92 | ||||
-rw-r--r-- | Assets/UI_Extension/Editor/GridLayoutGroupExtEditor.cs.meta | 11 | ||||
-rw-r--r-- | Assets/UI_Extension/Editor/MenuOptions.cs | 123 | ||||
-rw-r--r-- | Assets/UI_Extension/Editor/MenuOptions.cs.meta | 11 |
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: |