FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    ブログを
    https://freelyapps.net/
    に移転する予定です。
    リンク切れがある記事はこちらに移動した可能性もあります。

    カテゴリ:Unity > Editor

      このエントリーをはてなブックマークに追加 Clip to Evernote
    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");
    というようにしてどのアセンブリにいるかを指定すれば型が取れます。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    MonoBehaviourを継承したゲームオブジェクトにアタッチできるスクリプト(C#)を作るとします。通常はヒエラルキーにゲームオブジェクトを用意してそこにスクリプトをドラッグアンドドロップしてアタッチします。
    この作業はドラッグに失敗したりすると、非常にイライラします。
    いくつかのスクリプトをつけるときはコンポーネントの追加ボタンを押せばいいのですが、新たにゲームオブジェクトを作るときはゲームオブジェクトを作り、そこにアタッチするというちょっと面倒な手順があります。

    以前スクリプトをヒエラルキーにドラッグしたら、それがアタッチされたゲームオブジェクトを作成するようなことを試していました。
    スクリプトをヒエラルキーにドラッグアンドドロップしてゲームオブジェクトが作られるようにする」 という記事にこれが書いてあります。大体やりたいことはできていたのですが、ドラッグしたままにすると問題があったりしました。(理解して使うなら十分使えるというくらいの出来でした。)

    これをショートカットキーでやれば良いのではないかと思いつきました。 
    こんな感じに改造しました。スクリプトを見つけるところはSelectionに任せ、作るかどうかの決定はメニューを押すことになりました。
    イベントを確実に取ることが簡単なので、この方法が一番良い気がします。 

    使い方は簡単でアタッチできるスクリプトを選択した状態でCtrl+Gを押すかコンテキストメニューのCreate->GameObject from Scriptを押すと、選択されているスクリプトがアタッチされたゲームオブジェクトをヒエラルキーに作成します。
    CreateGameObjectFromScript

    複数のスクリプトから同時にゲームオブジェクトが作成でき、C#のスクリプト以外を選択してあっても無視されます。

    このページのトップヘ