FreelyApps

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


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

    カテゴリ:Unity > デバッグ

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity 5.2が公開されてログの表示が強化されていました。Stacktrace loggingというようです。使い勝手は今のところ実験的な機能というところです。今のところ必要かわかりませんが、詳細を見れるようになったということでデバッグに活用できるかもしれません。

    3種類のログの出力形式を選べるようになります。
    None、ScriptOnly、Fullです。このうちScriptOnlyというのが従来のログと同じ形式です。インストールしたときのデフォルトがこの設定でした。
    コンソールを開き、設定ボタンをクリックします。Stack Trace Loggingという項目があるのでそれを選ぶと、ログの表示形式を選ぶことができます。
    stl


    どのような見た目になるかは以下の画像のようになりました。

    Noneの場合
    simlog

    ScriptOnlyの場合
    nlog
     
    Fullの場合
    stlog

     
    Noneはログがそのまま出ているだけの表示なので、見やすいですが情報が少ないです。余計な情報が出ないのであまり重要でないところではこの表示にしておくとログ全体が見やすくなります。 

    ScriptOnlyは今までの表示と同じです。慣れている人はこの設定が良いでしょうし、表示される情報もちょうどいいので特に気にならなければこの設定が良いです。

    Fullは多くの情報が出ているのがわかります。表示の先頭にある0x~というのはおそらくメモリのアドレスを表しているのだと思いますが、詳しいことはわかりません。(64bit分の表示なので、可能性は高いと思います。)


    現時点で役に立ちそうなのは、Application.stackTraceLogTypeをスクリプトでいじるとログの表示を動的に変えて見やすくすることくらいでしょうか。それをやるにしてもリリースするものにこの処理が入るのは無駄なので、定義を使わなければ駄目かと思います。
    Editorスクリプト用ならリリースに含まれないので、それに活用するくらいかもしれません。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity5.1からUnityEngine.Assertionsが使えるようになりました。スクリプトリファレンスはこちらに載っています。
    アサートは開発時に有用な機能です。Unityだけでなく、色々なプログラミング言語に同じような機能があります。どのような場合もプログラムの検証用に用いられます。
    例を挙げると、ある変数の値が0であるべき場所でそうなっているかを調べたり、値の範囲が想定内に収まっているかを調べるために使われます。

    基本的にデバッグ版のみに有効化するものです。リリース版には検証用のコード(Assertも含む) は取り除かれ余計な処理をせずに高速に実行するべきだからです。
    デバッグであれば実行速度が遅くなったとしても問題を検知できる方が重要なので、Assertを有効化して問題が起こっていないかを調べるのです。

    Assertとは英単語で意味は「主張する」といったものです。それゆえ条件を満たしているかを「主張する」機能に使われるようになったようです。 
    大抵の場合は条件を満たさないときにエラーメッセージを出力するか例外を発生させます。UnityEngine.Assertionsではこのどちらもサポートしていますが、エラーメッセージを出力するほうで十分だと思います。例外の処理を忘れると、おかしな挙動になってしまうのです。



    UnityEngine.Assertionsの使い方を説明していきましょう。

    using UnityEngine.Assertions;を宣言しておき、判定したいところでAssert.IsTrue(bool値のもの);というように書けば良いです。Assert.IsTrueの場合は引数の値がtrueであれば何もせず、falseであるとエラーになります。第2引数の指定もでき、そこにはメッセージを指定できます。どのようなエラーなのかわかりやすくするためにコメントを書いておくことをお勧めします。
    他にもIsNotNull(nullでないことを保証する)とかAreEqual(値が一致するか保障する)などがあります。

    このアサートはUNITY_ASSERTIONSが定義されているとき有効であり、ないときはコードから消えます。Development BuildのときはUNITY_ASSERTIONSが自動で定義されるようですが、UNITY_ASSERTIONSを自分で定義する方が便利だと思いました。

    using UnityEngine.Assertions.Must;を宣言すると、Assertを利用した拡張メソッドが使えるようになります。bool、int 、floatなどの型にメソッドが追加され、(数式).MustBeEqual(0);というようにアサートを書くことができます。(拡張メソッドなので、using UnityEngine.Assertions.Must;は必須になります。)

    Assert.raiseExceptionsをtrueに設定するとエラーを表示するのではなく、例外を発生させます。デフォルトはfalseなのでエラー表示がされるだけです。例外処理を書いてアサートを処理したい場合はtrueにすることになるでしょう。

    このページのトップヘ