57 lines
1.7 KiB
C#
57 lines
1.7 KiB
C#
#if UNITY_2018_3_OR_NEWER
|
|
using UnityEditor.Experimental.SceneManagement;
|
|
#endif
|
|
using UnityEditor;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine;
|
|
|
|
namespace Coffee.UISoftMask
|
|
{
|
|
internal static class EditorUtils
|
|
{
|
|
internal static void MarkPrefabDirty()
|
|
{
|
|
#if UNITY_2018_3_OR_NEWER
|
|
var prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
|
|
if (prefabStage == null) return;
|
|
EditorSceneManager.MarkSceneDirty(prefabStage.scene);
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verify whether it can be converted to the specified component.
|
|
/// </summary>
|
|
internal static bool CanConvertTo<T>(Object context) where T : MonoBehaviour
|
|
{
|
|
return context && context.GetType() != typeof(T);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert to the specified component.
|
|
/// </summary>
|
|
internal static void ConvertTo<T>(Object context) where T : MonoBehaviour
|
|
{
|
|
var target = context as MonoBehaviour;
|
|
var so = new SerializedObject(target);
|
|
so.Update();
|
|
|
|
var oldEnable = target.enabled;
|
|
target.enabled = false;
|
|
|
|
// Find MonoScript of the specified component.
|
|
foreach (var script in Resources.FindObjectsOfTypeAll<MonoScript>())
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
}
|