Layer.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Collections.Generic;
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace EnhancedHierarchy.Icons {
  5. public sealed class Layer : IconBase {
  6. public override IconPosition Side { get { return IconPosition.All; } }
  7. public override Texture2D PreferencesPreview { get { return Utility.GetBackground(Styles.layerStyle, true); } }
  8. //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }
  9. public override void DoGUI(Rect rect) {
  10. GUI.changed = false;
  11. EditorGUI.LabelField(rect, Styles.layerContent);
  12. var layer = EditorGUI.LayerField(rect, EnhancedHierarchy.CurrentGameObject.layer, Styles.layerStyle);
  13. if (GUI.changed)
  14. ChangeLayerAndAskForChildren(GetSelectedObjectsAndCurrent(), layer);
  15. }
  16. public static void ChangeLayerAndAskForChildren(List<GameObject> objs, int newLayer) {
  17. var changeMode = AskChangeModeIfNecessary(objs, Preferences.LayerAskMode, "Change Layer",
  18. "Do you want to change the layers of the children objects as well?");
  19. switch (changeMode) {
  20. case ChildrenChangeMode.ObjectOnly:
  21. foreach (var obj in objs) {
  22. Undo.RegisterCompleteObjectUndo(obj, "Layer changed");
  23. obj.layer = newLayer;
  24. }
  25. break;
  26. case ChildrenChangeMode.ObjectAndChildren:
  27. foreach (var obj in objs) {
  28. Undo.RegisterFullObjectHierarchyUndo(obj, "Layer changed");
  29. obj.layer = newLayer;
  30. foreach (var transform in obj.GetComponentsInChildren<Transform>(true))
  31. transform.gameObject.layer = newLayer;
  32. }
  33. break;
  34. }
  35. }
  36. }
  37. }