using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEditor; namespace Coffee.UIExtensions.Editors { /// /// SoftMask editor. /// [CustomEditor(typeof(SoftMask))] [CanEditMultipleObjects] public class SoftMaskEditor : Editor { //%%%% Context menu for editor %%%% [MenuItem("CONTEXT/Mask/Convert To SoftMask", true)] static bool _ConvertToSoftMask(MenuCommand command) { return CanConvertTo(command.context); } [MenuItem("CONTEXT/Mask/Convert To SoftMask", false)] static void ConvertToSoftMask(MenuCommand command) { ConvertTo(command.context); } [MenuItem("CONTEXT/Mask/Convert To Mask", true)] static bool _ConvertToMask(MenuCommand command) { return CanConvertTo(command.context); } [MenuItem("CONTEXT/Mask/Convert To Mask", false)] static void ConvertToMask(MenuCommand command) { ConvertTo(command.context); } /// /// Verify whether it can be converted to the specified component. /// protected static bool CanConvertTo(Object context) where T : MonoBehaviour { return context && context.GetType() != typeof(T); } /// /// Convert to the specified component. /// protected static void ConvertTo(Object context) where T : MonoBehaviour { var target = context as MonoBehaviour; var so = new SerializedObject(target); so.Update(); bool oldEnable = target.enabled; target.enabled = false; // Find MonoScript of the specified component. foreach (var script in Resources.FindObjectsOfTypeAll()) { if (script.GetClass() != typeof(T)) continue; // Set 'm_Script' to convert. so.FindProperty("m_Script").objectReferenceValue = script; so.ApplyModifiedProperties(); break; } (so.targetObject as MonoBehaviour).enabled = oldEnable; } } }