UnityでType.GetType()するとnullになる問題

状況

UnityでC#を書いている時に、

Type type = Type.GetType("Game.Scenario.ScenarioPlayer");
Debug.Log(type);  // => null

のような形でクラス名の文字列からTypeを取得しようと思ったのですが、typeはnullになってしまいます。

ScenarioPlayer は以下のように Game.Scenario 名前空間にあります。

namespace Game.Scenario
{
    public class ScenarioPlayer
    {
        // do something
    }
}

解決方法

Type.GetType() を使うときは、カンマ区切りでアセンブリ名も指定する必要がありました。

Type type = Type.GetType("Game.Scenario.ScenarioPlayer, Assembly-CSharp");
Debug.Log(type);  // => Game.Scenario.ScenarioPlayer

Unityだと自分でアセンブリ分割してない場合、デフォルトのアセンブリ名は Assembly-CSharp になります。(エディタスクリプトの場合は Assembly-CSharp-Editor になります)

ちなみにアセンブリ名は以下のように取得できます。

string assemblyName = typeof(SkitStepContentDrawer).Assembly.GetName().Name;
Debug.Log(assemblyName);  // => Assembly-CSharp

参考

Type.GetType メソッド (System)
指定された型を表すTypeオブジェクトを取得します。

コメント