Nodachisoft Nodachisoft logo, Katana Sword Icon
  
@あまじ✎ 2022年1月11日に更新

Unity の C# コードで System.Type.GetType が null を返してしまう

Unity の C# コードで System.Type.GetType が null を返してしまう

概要

Unity で C#(.NET) でプログラミングしているとき、 テストコード内や別のライブラリから System.Type.GetType を使って 指定のクラスTYPE を取得しようとしたが、null が返ってきてしまったので 原因と解消方法を記載しておきます。

環境

  • Unity2020.3 LTS
  • Windows10 HomeEdition

原因と解消

今まで一つのプロジェクト(dll)で作っていたコードを整理整頓したとき、 共通ライブラリ部分を、個別の DLL に分割したことが原因です。

GetType の仕様

System.Type.GetType は、以下のように使用すると、 動作している自身のアセンブリ・インスタンス内から指定した Type を取得します。

 
GetType
System.Type wolfType = System.Type.GetType("MyGame.Enemy.Wolf");

自身のアセンブリ・インスタンス内について検索するため、 Unity のテストコード(Unity Test Runner)や、別のライブラリの 配下に作ったコード内から実行すると別のアセンブリ定義ファイルが適用され、ゲーム本体のアセンブリへの GetType がうまくいきません。 (私の環境ではUnity のアセンブリ定義ファイル(asmdefファイル)内でちゃんと参照を書いていてもうまくいきませんでした)

その場合、GetType を使用するとき、どの dll を参照するかを明記します。

例えば、MyGame.dll の中のクラスMyGame.Enemy.Wolf に対して 別のアセンブリ定義ファイルを適用しているテストコードやライブラリからアクセスしたい場合、 以下のように記述します。

 
GetType
System.Type wolfType = System.Type.GetType("MyGame.Enemy.Wolf,MyGame");

書き方は下のようになります。

 
GetType
System.Type.GetType("パス,DLLの名前");

補足

実行している自身のアセンブリ名称と、 アセンブリが外部に公開している Type の一覧は以下のようなコードで取得できます。

 
DispAssembly.cs
Assembly asm = Assembly.GetExecutingAssembly();
UnityEngine.Debug.Log("アセンブリ名=" + asm.FullName);
foreach (System.Type type in asm.GetExportedTypes()) {
    UnityEngine.Debug.Log(type);
}

Unity のデバッグに出力するため、UnityEngine.Debug.Log(type); としていますが、 通常のコンソールなら Console.WriteLine(type) に書き換えて実行してください。

以上です!

参考

変更履歴

日付 変更概要
なし
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

Unityで親子の GameObject を相対パスで取得する。親の子供などもさかのぼってパスで取得する方法

Unityで親子の GameObject を相対パスで取得する。親の子供などもさかのぼってパスで取得する方法

#Unity✎ 2022-1-11
Unityで親子の GameObject を相対パスで取得する。親の子供などもさかのぼってパスで取得する方法
目次
Unity の C# コードで System.Type.GetType が null を返してしまう
Unity の C# コードで System.Type.GetType が null を返してしまう
概要
概要
環境
環境
原因と解消
原因と解消
GetType の仕様
GetType の仕様
補足
補足
参考
参考
変更履歴
変更履歴
Nodachisoft © 2021