コンテンツにスキップ

Assertionを使ったスクリプトエラーチェック

HeliScriptのグローバルスコープで関数を定義できる特性を活用することで、Assertionのような機能を独自に実装できます。 この記事では、条件が満たされない場合に自動的にエラーメッセージを表示するAssertion関数の実装例と使い方を紹介します。

動作環境

SDKバージョン : 14.1.2 以降
OS : Windows11
Unity : 2022.3.6f1
ブラウザ :Google Chrome

Assertion関数とは

Assertion関数は、条件が「真(true)」であることを確認するための便利な機能です。条件が「偽(false)」の場合は、指定したエラーメッセージを表示します。これにより、デバッグ時にスクリプトの問題を早期に発見できます。

実装例

以下は、カスタムAssertion関数の実装例です。このコードをグローバルスコープでファイルに追加してください:

void chsSystemAssert(bool condition, string errorMessage)
{
    // デバッグモードでない場合は何もしない
    if (!hsSystemIsDebugMode()) return;
    if (condition) return;
    hsSystemWriteLine("Error: %s" % errorMessage);
}

Warning

  • 関数はデバッグモードがオンの時のみ機能します。この制限はアップロード後でも同様で、デバッグモードがオンになっていれば機能します。
  • エラーが見つかった場合でも、プログラムは停止せずに続行します。これは、HeliScriptには現在プログラムを強制的に停止させる機能がないためです。

関数名について

HeliScriptでは、SDK標準で用意されているグローバル関数は基本hsで始まります(例:hsSystemWriteLine)。上記の例では、カスタムで作成したグローバル関数であるため、区別するためにchsというプレフィックスを使用しています。

なお、カスタム関数の名前は自由に決めることができます。自身のスタイルに合った命名で実装してください。

使い方

スクリプト内でエラーチェックしたい箇所で、この関数を呼び出します:

chsSystemAssert(condition, errorMessage);
  • condition: チェックしたい条件(trueであるべき)
  • errorMessage: 条件が満たされない場合に表示するメッセージ

例えば、プレイヤーの位置が特定の範囲内にあることを確認したい場合:

// プレイヤーのx座標が0〜100の範囲内かチェック
float posX = GetPlayerPosX();
chsSystemAssert(posX >= 0 && posX <= 100, "プレイヤーが有効範囲外です!");