using UnityEditor; using UnityEngine; namespace AibisDream.SystemEditor { public static class EditorKit { public static readonly GUIStyle BoldFont = new(EditorStyles.label) { fontStyle = FontStyle.Bold }; public static int SortingLayerField(string label, int id) { // 先获取layer var layers = GetSortingLayerNames(); // 将ID转为idx var idx = TransSortingLayer2Idx(id); var newIdx = EditorGUILayout.Popup(label, idx, layers); return TransIdx2SortingLayer(newIdx); } private static string[] GetSortingLayerNames() { // 获取所有 Sorting Layer 名称 var layerCount = SortingLayer.layers.Length; var sortingLayerNames = new string[layerCount]; for (var i = 0; i < layerCount; i++) { sortingLayerNames[i] = SortingLayer.layers[i].name; } return sortingLayerNames; } private static int TransSortingLayer2Idx(int id) { var layers = SortingLayer.layers; for (var i = 0; i < layers.Length; i++) { if (layers[i].id == id) return i; } return 0; } private static int TransIdx2SortingLayer(int idx) { if (idx < 0 || idx >= SortingLayer.layers.Length) { return SortingLayer.layers[0].id; } return SortingLayer.layers[idx].id; } public static void RecordObjectAndChildren(GameObject parent, string actionName) { Transform[] transforms = parent.GetComponentsInChildren(true); Object[] objectsToUndo = new Object[transforms.Length]; for (int i = 0; i < transforms.Length; i++) { objectsToUndo[i] = transforms[i].gameObject; } Undo.RegisterCompleteObjectUndo(objectsToUndo, actionName); } } }