UnityEngine.Typesが使えなくなりました

5.5になり、UnityEngine.Typesが使えなくなりました

`UnityEngine.Types.GetType(string, string)’ is obsolete: `This was an internal method which is no longer used’
というエラーログが出ます。

エディター拡張(スクリプトからそれがアタッチされたゲームオブジェクトを作成する拡張)でこれをつかっていたものがあったので対応する必要がありました。

対応方法は別のメソッドを使うだけです。Unityで有名なこちらのブログ

【Unity】クラス名からTypeを取得する(テラシュールブログより)

の記事がわかりやすいと思います。

私の場合は、
UnityEngine.Types.GetType(className,”Assembly-CSharp”);
と書いていたところを

System.Reflection.Assembly.Load(“Assembly-CSharp”).GetType(className);
と直して問題なく動きました。

少し調べてみたところ上記の方法でなくても行う方法がありました。
System.Type.GetTypeというメソッドでもTypeを取得できるようでした。型の名前を引数にとり、型を返すメソッドです。実行中のアセンブリ(dllと考えていい)かMscorlib.dllに含まれる型であれば名前空間で修飾した型名で型が取れるようです。
Unityで作ったスクリプトはAssembly-CSharp.dllにあり、エディタースクリプト実行時には当然実行中のアセンブリではないです。System.Type.GetTypeはアセンブリ名を修飾した名前で呼べば型を取得できるようになっているので、
System.Type.GetType(className+ “,Assembly-CSharp”);
というようにしてどのアセンブリにいるかを指定すれば型が取れます。

コメント

タイトルとURLをコピーしました