うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】スクリプトが MonoBehaviour を継承しているクラスかどうかを判定する

using UnityEditor;
using UnityEngine;
 
public static class AssetUtility
{
    /// <summary>
    /// スクリプトが MonoBehaviour を継承しているかどうか
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static bool IsMonoBehaviour(string path)
    {
        var assetType = AssetDatabase.GetMainAssetTypeAtPath(path);
        if (assetType != typeof(MonoScript))
            return false;

        var mono = AssetDatabase.LoadAssetAtPath<MonoScript>(path);

        return IsMonoBehaviour(mono);
    }
 
    public static bool IsMonoBehaviour(UnityEngine.Object obj)
    {
        if (!(obj is MonoScript))
        {
            return false;
        }
        var mono = obj as MonoScript;
        var type = mono.GetClass();
        if (type == null)
        {
            return false;
        }
 
        return type.IsSubclassOf(typeof(MonoBehaviour));
    }
}