FreelyApps

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


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    タグ:Unity5.5

      このエントリーをはてなブックマークに追加 Clip to Evernote
    次のようなログが出続けるバグがUnity 5.5.1.f1 Personalで発生しました。
    many-log

    調べてみると原因は5.5.0f3の時からあるバグのようでした。
    issue


    私の環境だと、以下の条件を満たすと発生するようです。
    1. シーンビューが2Dモードになっている
    2. Transform ToolsがRectTransform用になっている
    3. CanvasにRectTransformのwidthかheightが0のゲームオブジェクトがあり、それに子がある
    4. 上記の子のゲームオブジェクトを選択している
    非常にまれな条件で発生するように見えますが、UIを作っていると発生する可能性があります。

    問題としてはログが大量に出ることによりFPSが極端に低下しゲームが動かなくなってしまいます。
    暫定的対処として、とりあえずTransform Tools(Editorの左上にある手とか移動とか回転のツールのこと)をRectTransform用のものにしなければ良いと思います。もしくは選択しているものを変えると良いです。

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

    このページのトップヘ