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; //} } }