private void CreateLayerList() { _layerList.Clear(); for (int i = 0; i < sortingLayerNames.Length; i++) { SortingLayerInfo info = new SortingLayerInfo(); info.name = sortingLayerNames[i]; info.layerID = sortingLayersProp.GetArrayElementAtIndex(i).FindPropertyRelative("uniqueID").intValue; _layerList.Add(info); } foreach (SortingLayerInfo sortingLayerInfo in _layerList) { sortingLayerInfo.rendererList = new List <Renderer>(); foreach (Renderer sceneRenderer in FindObjectsOfType <Renderer>()) { if (sceneRenderer.sortingLayerID == sortingLayerInfo.layerID) { sortingLayerInfo.rendererList.Add(sceneRenderer); sceneRenderer.sortingOrder = sortingLayerInfo.rendererList.IndexOf(sceneRenderer); } } sortingLayerInfo._reorderableRendererList = new ReorderableList(sortingLayerInfo.rendererList, typeof(Renderer), true, true, false, false); _reorderableLayerList = new ReorderableList(_layerList, typeof(String), true, true, true, true); } currentSelectedRenderer = null; currentRenderers.Clear(); foreach (Renderer renderer in FindObjectsOfType <Renderer>()) { currentRenderers.Add(renderer); } }
private void CreateNewLayer() { int newID = 0; string newLayerName = ""; bool foundID = false; sortingLayersProp.InsertArrayElementAtIndex(sortingLayersProp.arraySize); for (int i = 0; i < sortingLayersProp.arraySize; i++) { for (int j = 0; j < sortingLayersProp.arraySize; j++) { if (i == sortingLayersProp.GetArrayElementAtIndex(j).FindPropertyRelative("uniqueID").intValue) { foundID = false; break; } else { foundID = true; } } if (foundID) { newID = i; newLayerName = "New Layer (" + newID + ")"; break; } } sortingLayersProp.GetArrayElementAtIndex(sortingLayersProp.arraySize - 1) .FindPropertyRelative("name") .stringValue = newLayerName; sortingLayersProp.GetArrayElementAtIndex(sortingLayersProp.arraySize - 1) .FindPropertyRelative("uniqueID") .intValue = newID; tagManager.ApplyModifiedProperties(); sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); sortingLayerNames = (string[])sortingLayersProperty.GetValue(null, new object[0]); SortingLayerInfo newLayer = new SortingLayerInfo(); newLayer.name = newLayerName; newLayer.rendererList = new List <Renderer>(); newLayer.layerID = newID; newLayer._reorderableRendererList = new ReorderableList(newLayer.rendererList, typeof(Renderer), true, true, false, false); _layerList.Add(newLayer); _layerNames.Add(newLayerName); _layerLabelNames.Add(newLayerName); _reorderableLayerList = new ReorderableList(_layerList, typeof(String), true, true, true, true); currentLayerSelected = 0; foreach (SortingLayerInfo layerinfo in _layerList) { layerinfo.enumIndex = 0; } }
private void OnEnable() { tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); sortingLayersProp = tagManager.FindProperty("m_SortingLayers"); CreateLayerNames(); internalEditorUtilityType = typeof(InternalEditorUtility); sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); sortingLayerNames = (string[])sortingLayersProperty.GetValue(null, new object[0]); _layerList.Clear(); for (int i = 0; i < sortingLayerNames.Length; i++) { SortingLayerInfo info = new SortingLayerInfo(); info.name = sortingLayerNames[i]; info.layerID = sortingLayersProp.GetArrayElementAtIndex(i).FindPropertyRelative("uniqueID").intValue; _layerList.Add(info); } foreach (SortingLayerInfo sortingLayerInfo in _layerList) { sortingLayerInfo.rendererList = new List <Renderer>(); foreach (Renderer sceneRenderer in FindObjectsOfType <Renderer>()) { if (sceneRenderer.GetType().Name != "MeshRenderer" || sceneRenderer.GetComponent <TextMesh>() != null) { if (sceneRenderer.sortingLayerID == sortingLayerInfo.layerID) { sortingLayerInfo.rendererList.Add(sceneRenderer); sceneRenderer.sortingOrder = sortingLayerInfo.rendererList.IndexOf(sceneRenderer); } } } sortingLayerInfo._reorderableRendererList = new ReorderableList(sortingLayerInfo.rendererList, typeof(Renderer), true, true, false, false); _reorderableLayerList = new ReorderableList(_layerList, typeof(String), true, true, true, true); } currentSelectedRenderer = null; foreach (Renderer renderer in FindObjectsOfType <Renderer>()) { if (!(renderer is MeshRenderer) || renderer.GetComponent <TextMesh>() != null) { currentRenderers.Add(renderer); } } }