using TMPro; using UnityEditor; using UnityEngine; using UnityEngine.UI; public static class MyUIUtil { static string path_whitebg = "Assets/ResWork/UI_Image/Common/whitebg.png"; static void SetLayerRecursively(GameObject obj, string newLayer = "UI") { obj.layer = LayerMask.NameToLayer(newLayer); foreach (Transform child in obj.transform) SetLayerRecursively(child.gameObject, newLayer); // 재귀 호출로 자식까지 처리 } [MenuItem("GameObject/UI/New Image &i")] // &i는 Alt + I를 의미 static void CreateUIImage() { GameObject imageObject = new GameObject("New Image", typeof(Image)); // 생성된 오브젝트에 대한 Undo 기록 추가 Undo.RegisterCreatedObjectUndo(imageObject, "New Image"); var img = imageObject.GetComponent(); img.raycastTarget = false; img.sprite = AssetDatabase.LoadAssetAtPath(path_whitebg); if (Selection.activeGameObject != null) { imageObject.transform.SetParent(Selection.activeGameObject.transform, false); SetLayerRecursively(imageObject); // 새로 생성된 오브젝트를 선택 Selection.activeGameObject = imageObject; // 씬 뷰에서 해당 오브젝트에 포커스 맞추기 //SceneView.lastActiveSceneView.FrameSelected(); } } [MenuItem("GameObject/UI/Text Only &t")] // &t는 Alt + T를 의미 static void CreateUITextMeshPro() { GameObject textObject = new GameObject("New TMP", typeof(TextMeshProUGUI)); // 생성된 오브젝트에 대한 Undo 기록 추가 Undo.RegisterCreatedObjectUndo(textObject, "New TMP"); var tm = textObject.GetComponent(); tm.raycastTarget = false; tm.alignment = TextAlignmentOptions.Midline; tm.textWrappingMode = TextWrappingModes.NoWrap; if (Selection.activeGameObject != null) { textObject.transform.SetParent(Selection.activeGameObject.transform, false); SetLayerRecursively(textObject); // 새로 생성된 오브젝트를 선택 Selection.activeGameObject = textObject; // 씬 뷰에서 해당 오브젝트에 포커스 맞추기 //SceneView.lastActiveSceneView.FrameSelected(); } } [MenuItem("GameObject/UI/Text - Local &y")] static void CreateUITextMeshProWithLocal() { GameObject textObject = new GameObject("Local TMP", typeof(TextMeshProUGUI)); // 생성된 오브젝트에 대한 Undo 기록 추가 Undo.RegisterCreatedObjectUndo(textObject, "Local TMP"); var tm = textObject.GetComponent(); tm.raycastTarget = false; tm.alignment = TextAlignmentOptions.Midline; tm.textWrappingMode = TextWrappingModes.NoWrap; if (Selection.activeGameObject != null) { textObject.transform.SetParent(Selection.activeGameObject.transform, false); SetLayerRecursively(textObject); // 새로 생성된 오브젝트를 선택 Selection.activeGameObject = textObject; // 씬 뷰에서 해당 오브젝트에 포커스 맞추기 //SceneView.lastActiveSceneView.FrameSelected(); } } [MenuItem("GameObject/UI/Button &b")] // Alt + B: Button 생성 (Image, Button, PlayClickSound_Only 추가) static void CreateUIButton() { // 버튼 오브젝트 생성 (Image, Button 컴포넌트 포함) GameObject buttonObject = new GameObject("btn_"); // 생성된 오브젝트에 대한 Undo 기록 추가 Undo.RegisterCreatedObjectUndo(buttonObject, "btn_"); buttonObject.AddComponent().sprite = AssetDatabase.LoadAssetAtPath(path_whitebg); buttonObject.AddComponent