はじめに
今回はAssert
クラスでのコンソールへのエラーの出し方についての記事になります!
Assert
はUnityEngine.Assertion
名前空間に属するクラスで、お馴染みのDebug.Log
のようにコンソールへログを出す静的なメソッドがいくつも含まれています。
例えばnull
には絶対にならないといった場合にエラーメッセージをログに残すならDebug.Assert
でも出来なくはないのですが、Assert
クラスの方が便利な場合が多いみたいです。
またアサーションメソッドは本番ビルドから自動で削除されるので、なにかと心配しなく使うことができます。(Debugクラスもできる)
実際に使ってみる
using UnityEngine; using UnityEngine.Assertions; //ここを忘れずにする public class AssertTest : MonoBehaviour { [SerializeField] private GameObject _someGameObject; private void Start() { //_someGameObjectがnullの場合にエラーを出す Assert.IsNotNull(_someGameObject, "_someGameObjectがnullです"); } }
もし_someGameObject
をインスペクターから設定し忘れた場合、以下のようなエラーコードがでてきます。
この場合は第一引数である_someGomeObject
がnull
であった場合、第2引数のメッセージとともにエラーを出力します。
このようなメソッドがAssert
クラスにはいくつも用意されています。
メソッド名 | 説明 |
---|---|
IsTrue | 条件が真か確認する(偽ならエラー) |
IsFalse | 条件が偽か確認する(真ならエラー) |
IsNull | null か確認する(null じゃなければエラー) |
IsNotNull | null ではないことを確認する(null ならエラー) |
AreEqual | 値が等しいか確認する(異なればエラー) |
AreNotEqual | 値が異なるか確認する(等しければエラー) |
AreApproximatelyEqual | 値がほぼ等しいか確認する。float用(ほぼ等しくなければエラー) |
AreNotApproximatelyEqual | 値がほぼ等しくないか確認する。float用(ほぼ等しければエラー) |
制御フローを停止する
初期設定ではアサーションメソッドが失敗しても、実行の制御フローは中断されません。つまり、エラーがでてもコードが止まることはないのです。
しかし、Assert
クラスのstatic変数であるraiseExceptions
をtrue
にすることでコードを止めることができます。
using UnityEngine; using UnityEngine.Assertions; //ここを忘れずにする public class AssertTest : MonoBehaviour { [SerializeField] private GameObject _someGameObject; private void Start() { //エラーがでた場合実行を停止する Assert.raiseExceptions = true; //_someGameObjectがnullの場合にエラーを出す Assert.IsNotNull(_someGameObject, "_someGameObjectがnullです"); Debug.Log("これは実行されない"); } }
さいごに
例外処理を用いずにエラーを出してしまうというのも一つの手ではないのでしょうか。
是非うまく活用してみてください!