Unity5.1からUnityEngine.Assertionsが使えるようになりました。スクリプトリファレンスはこちらに載っています。
アサートは開発時に有用な機能です。Unityだけでなく、色々なプログラミング言語に同じような機能があります。どのような場合もプログラムの検証用に用いられます。
例を挙げると、ある変数の値が0であるべき場所でそうなっているかを調べたり、値の範囲が想定内に収まっているかを調べるために使われます。
基本的にデバッグ版のみに有効化するものです。リリース版には検証用のコード(Assertも含む) は取り除かれ余計な処理をせずに高速に実行するべきだからです。
デバッグであれば実行速度が遅くなったとしても問題を検知できる方が重要なので、Assertを有効化して問題が起こっていないかを調べるのです。
Assertとは英単語で意味は「主張する」といったものです。それゆえ条件を満たしているかを「主張する」機能に使われるようになったようです。
大抵の場合は条件を満たさないときにエラーメッセージを出力するか例外を発生させます。UnityEngine.Assertionsではこのどちらもサポートしていますが、エラーメッセージを出力するほうで十分だと思います。例外の処理を忘れると、おかしな挙動になってしまうのです。
アサートの使い方
UnityEngine.Assertionsの使い方を説明していきましょう。
他にも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にすることになるでしょう。
コメント