using UnityEditor;
using UnityEngine;
///
/// Unity编辑器类帮助类。
///
public static class ClassHelper
{
///
/// 获取MonoBehaviour的脚本Id。
///
/// 脚本类型。
/// 脚本Id。
public static int GetClassID(System.Type type)
{
GameObject gameObject = EditorUtility.CreateGameObjectWithHideFlags("Temp", HideFlags.HideAndDontSave);
Component component = gameObject.AddComponent(type);
SerializedObject @class = new SerializedObject(component);
int classID = @class.FindProperty("m_Script").objectReferenceInstanceIDValue;
Object.DestroyImmediate(gameObject);
return classID;
}
///
/// 获取MonoBehaviour的脚本Id。
///
/// 脚本类型。
/// 脚本Id。
public static int GetClassID() where T : MonoBehaviour
{
return GetClassID(typeof(T));
}
#region Method Documentation
/************************************************************************************************************
Example:
[MenuItem("GameObject/UI/转化成CustomText", false, 1999)]
public static void ConvertToCustomText(MenuCommand menuCommand)
{
GameObject go = menuCommand.context as GameObject;
if (go != null)
{
Text text = go.GetComponent();
if (text != null)
{
var ob = ClassHelper.ReplaceClass(text, typeof(CustomText));
ob.ApplyModifiedProperties();
}
}
}
************************************************************************************************************/
#endregion
///
/// 替换MonoBehaviour脚本。
///
///
///
///
public static SerializedObject ReplaceClass(MonoBehaviour monoBehaviour, System.Type type)
{
int classID = GetClassID(type);
SerializedObject @class = new SerializedObject(monoBehaviour);
@class.Update();
@class.FindProperty("m_Script").objectReferenceInstanceIDValue = classID;
@class.ApplyModifiedProperties();
@class.Update();
return @class;
}
}