はじめに
今回は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("これは実行されない"); } }
さいごに
例外処理を用いずにエラーを出してしまうというのも一つの手ではないのでしょうか。
是非うまく活用してみてください!