| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | using UnityEditor;using UnityEditorInternal;using UnityEngine;namespace EnhancedHierarchy.Icons {    public sealed class Lock : IconBase {        public override IconPosition Side { get { return IconPosition.All; } }        public override Texture2D PreferencesPreview { get { return Utility.GetBackground(Styles.lockToggleStyle, false); } }        //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }        public override void DoGUI(Rect rect) {            var locked = (EnhancedHierarchy.CurrentGameObject.hideFlags & HideFlags.NotEditable) != 0;            using(new GUIBackgroundColor(locked ? Styles.backgroundColorEnabled : Styles.backgroundColorDisabled)) {                GUI.changed = false;                GUI.Toggle(rect, locked, Styles.lockContent, Styles.lockToggleStyle);                if (!GUI.changed)                    return;                var selectedObjects = GetSelectedObjectsAndCurrent();                var changeMode = AskChangeModeIfNecessary(selectedObjects, Preferences.LockAskMode.Value, "Lock Object",                    "Do you want to " + (!locked ? "lock" : "unlock") + " the children objects as well?");                switch (changeMode) {                    case ChildrenChangeMode.ObjectOnly:                        foreach (var obj in selectedObjects)                            Undo.RegisterCompleteObjectUndo(obj, locked ? "Unlock Object" : "Lock Object");                        foreach (var obj in selectedObjects)                            if (!locked)                                Utility.LockObject(obj);                            else                                Utility.UnlockObject(obj);                        break;                    case ChildrenChangeMode.ObjectAndChildren:                        foreach (var obj in selectedObjects)                            Undo.RegisterFullObjectHierarchyUndo(obj, locked ? "Unlock Object" : "Lock Object");                        foreach (var obj in selectedObjects)                            foreach (var transform in obj.GetComponentsInChildren<Transform>(true))                                if (!locked)                                    Utility.LockObject(transform.gameObject);                                else                                    Utility.UnlockObject(transform.gameObject);                        break;                }                InternalEditorUtility.RepaintAllViews();            }        }    }}
 |