状況
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オブジェクトを取得します。
コメント