using System; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditorInternal; using System.Reflection; using System.IO; namespace YKMoonEditor { public class UEditorUtility { public static bool GameObjectIsPrefab(GameObject gameObject) { if(gameObject == null) { return false; } string path = AssetDatabase.GetAssetPath(gameObject); if(string.IsNullOrEmpty(path)) { return false; } return true; } /// /// Get all sortingLayerNames. /// public static List GetSortingLayerNames() { Type internalEditorUtilityType = typeof(InternalEditorUtility); PropertyInfo sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); var sortingLayers = (string[])sortingLayersProperty.GetValue(null, new object[0]); return new List(sortingLayers); } public static void DrawMonoScriptLine(MonoBehaviour mono) { GUI.enabled = false; EditorGUILayout.ObjectField("Script:", MonoScript.FromMonoBehaviour(mono), mono.GetType(), false); GUI.enabled = true; } public static void DrawMonoScriptLine(UnityEngine.Object target) where T : MonoBehaviour { GUI.enabled = false; EditorGUILayout.ObjectField("Script:", MonoScript.FromMonoBehaviour((T)target), typeof(T), false); GUI.enabled = true; } public static void DrawMonoScriptLine(UnityEngine.Object target) { GUI.enabled = false; EditorGUILayout.ObjectField("Script:", MonoScript.FromMonoBehaviour(target as MonoBehaviour), target.GetType(), false); GUI.enabled = true; } public static List LoadAllAssetsAtPath(string path, string ext) where T : UnityEngine.Object { List objects = new List(); if(Directory.Exists(path)) { string[] assets = Directory.GetFiles(path); foreach(string assetPath in assets) { if(assetPath.Contains(".meta")) { continue; } if(assetPath.EndsWith(ext)) { objects.Add(AssetDatabase.LoadAssetAtPath(assetPath)); } } } return objects; } public static Rect SplitRect(Rect src, Vector2Int size, Vector2 space, int index, Vector2 padding) { float w = (src.width - space.x * (size.x - 1)) / size.x; float h = (src.height - space.y * (size.y - 1)) / size.y; float x = src.x + (index % size.x) * (space.x + w) + padding.x; float y = src.y + (index / size.x) * (space.y + h) + padding.y; return new Rect(x, y, w - padding.x, h - padding.y); } } }