最初のゲームテストの構築

ゲームテストとは

ゲームテストとは、モブやアイテムなどの一連の開始条件を備えた小規模な環境です。 その環境が Minecraft の世界に展開されてしばらくすると、条件付きコードを実行して期待どおりの結果が得られるか評価することができます。

一連のゲームテストを構築するにはビヘイビアー パックでゲームテストを構築し、シンプルな JavaScript コードを記述する必要があります。

重要

ゲームテスト フレームワークは、まだ試験的機能の段階です。 他のすべての試験的機能と同様に、事前にはっきりとした警告なしで Minecraft のバージョンごとに機能の追加、削除、変更が行われることがあります。 ゲームテスト フレームワークの変更点について詳しくは、Minecraft 変更ログをご確認ください。

試験的機能の詳細については、「Minecraft Bedrock Edition の試験的機能」をご覧ください。

注意事項

ゲームテスト フレームワークは機能の追加と更新が頻繁に行われるので、最新の Minecraft ベータ版のご利用をお勧めします。 詳細については、Minecraft ベータ版に関するページを参照してください。 このサンプルの構文は、最新のベータ版との互換性の確保を目的としています。

要件

本チュートリアルを開始する前に、以下を完了しておくことをお勧めします。

ゲームテストの各要素

ビヘイビアー パック内のゲームテストはすべて、以下の要素で構成されています。

  • 構造物 - これによってテスト用の物理環境や開始エンティティが定義されます。 Minecraft 内で新しい構造物を作成するには、(通常はクリエイティブモードで) 構造物を設計し、近くにストラクチャー ブロックを配置します。 そのストラクチャー ブロックを使用すれば、結果を保存できます。 保存すると .mcstructure ファイルが作成されるので、そのファイルをテストに追加できます。

Minecraft でゲームテストを実行すると、作成した構造物が読み込まれて Minecraft 内に展開されます。 この構造物は、通常はフラットで広大な世界に作成されて実行されるという点に注意する必要があります。そのため、モブがいる場合は作成した構造物でモブが囲われるようにしましょう。

その後はゲームテストで JavaScript コードを使用し、以下を含むテストの定義を行います。

  • テストの登録: 環境内でテストを設定するための少量のコード。

  • テストの設定: 作成した構造物の環境内で条件を設定する追加コード。 通常は、ここで追加のモブを作成します。

  • テストの検証: テストが正常に完了したか失敗したかを評価する、JavaScript で記述された追加のコード スニペット。

このシンプルな土台があれば、数行の JavaScript コードと Minecraft の構造物でゲームテストを作成できます。

独自のテストの構築を開始する

まずは、独自のビヘイビアー パックから始めましょう。 ビヘイビアー パックを開始するには、development_behavior_packs フォルダー内に startertests という新しいフォルダーを作成します。

重要

独自のゲームテストを構築して実行するには、最新の Minecraft ベータ版 (バージョン 1.16.230 以降) を使用する必要があります。 詳細については、Minecraft ベータ版に関するページを参照してください。

startertests フォルダー内には、以下の 2 つのサブフォルダーも含めましょう。

  • structures - MCStructure ファイルの保持に必要
  • scripts - JavaScript ファイルの保持に必要

マニフェストを更新する

startertests フォルダー内の manifest.json ファイルで、次のようにビヘイビアー パックのマニフェストを開始できます。

{
    "format_version": 2,
    "header": {
        "description": "Introductory tests for Minecraft GameTest Framework.",
        "name": "Starter Hello World Tests",
        "uuid": "1A2F42BD-98D4-4E0D-8E3F-934AB8A0C05E",
        "version": [0, 0, 1],
        "min_engine_version": [ 1, 14, 0 ]
    }
}

ビヘイビアー パックのマニフェストには、ゲームテストをサポートするための要素を追加する必要があります。 header セクションの下に追加した modules セクションに、JavaScript コードのエントリ ポイントを登録する、次のような 1 つのモジュールが必要です。

    "modules": [
        {
            "description": "Script that implements basic starter tests.",
            "type": "javascript",
            "uuid": "1A1B53FC-5653-4A75-91B7-9CDF027674AE",
            "version": [0, 0, 1],
            "entry": "scripts/StarterTests.js"
        }
    ]

この module の注意すべき点を以下に挙げます。

  • このモジュールの種類は javascript です。
  • uuid はプロジェクト用に固有のものを生成する必要があります。 新しい UUID を生成するためのツールについては、「ビヘイビアー パックの概要」トピックをご覧ください。
  • entry 属性は、ゲームテストのコードが含まれている JavaScript ファイルを指しています。

さらに、Minecraft API とゲームテスト フレームワークへの依存関係を設定する必要があります。 これは、modules セクションの下に次の依存関係を追加することで設定できます。

 "dependencies": [
      {
        "uuid": "b26a4d4c-afdf-4690-88f8-931846312678",
        "version": [ 0, 1, 0 ]
      },
      {
        "uuid": "6f4b6893-1bb6-42fd-b458-7fa3d0c89616",
        "version": [ 0, 1, 0 ]
      }
    ]

警告

uuid が Minecraft のコア コンポーネントを参照している点に注意してください。 dependencies セクション内のこれらの値は変更してはいけません

重要

ご覧のように、ゲームテスト フレームワークのテストはバージョン "0.1.0" の Minecraft API とゲームテスト フレームワークに依存しています。 バージョン 0 は、これらの機能がまだ試験的機能であることを示しています。 他のすべての試験的機能と同様に、これらの機能は日々改善されており、API 署名は事前通知なしでビルドを重ねるごとに変更される可能性があります。 その他の変更点の履歴については、Minecraft 変更ログをご確認ください。

ゲームテストを含むビヘイビアー パックのマニフェスト ファイル全体は、次のようになります。

{
    "format_version": 2,
    "header": {
        "description": "Introductory tests for Minecraft GameTest Framework.",
        "name": "Starter Hello World Tests",
        "uuid": "1A2F42BD-98D4-4E0D-8E3F-934AB8A0C05E",
        "version": [0, 0, 1],
        "min_engine_version": [ 1, 14, 0 ]
    },
    "modules": [
        {
            "description": "Script that implements basic starter tests.",
            "type": "javascript",
            "uuid": "1A1B53FC-5653-4A75-91B7-9CDF027674AE",
            "version": [0, 0, 1],
            "entry": "scripts/StarterTests.js"
        }
    ],
    "dependencies": [
      {
        "uuid": "b26a4d4c-afdf-4690-88f8-931846312678",
        "version": [ 0, 1, 0 ]
      },
      {
        "uuid": "6f4b6893-1bb6-42fd-b458-7fa3d0c89616",
        "version": [ 0, 1, 0 ]
      }
    ]
}

ゲームテストの登録

どのようなゲームテストにもスクリプト ファイルが必要です。 前のセクションでは、JavaScript ファイルを指す entry 属性を含むモジュールを追加しました。

        "entry": "scripts/StarterTests.js"

このファイルが登録された状態でゲームテスト フレームワークが有効化された世界を開くと、ゲームテストの JavaScript ファイルが読み込まれて実行されます。 このコードの主な役割は、下流のゲームテストを登録することです。

スクリプトや構造物に変更を加えたら、自分の世界から出て再読み込みを行う必要があるという点に注意してください。 スクリプト エラーがある場合は、世界が読み込まれたときに表示されます。

ゲームテスト スクリプトを登録するには、RegistrationBuilder クラスを使用しましょう。 RegistrationBuilder クラスの詳細については、「RegistrationBuilder クラス」をご覧ください。

RegistrationBuilder を使用した JavaScript のサンプル行は次のようになります。

// Registration Code for our test
GameTest.register("StarterTests", "simpleMobTest", simpleMobTest)
        .maxTicks(410)
        .structureName("startertests:mediumglass"); /* use the mediumglass.mcstructure file */

このコード行では、simpleMobTest という新しいテストを StarterTests テスト グループ内に設定します。 さらに、このテストを実行するのに 410 ティック (20.5 秒) かかる可能性があることを表すパラメーター (maxTicks) を追加しています。 最後に、このゲームテストには MCStructure (startertests:mediumglass) が指定されています。 これにより、Minecraft ではビヘイビアー パック フォルダー内の /structures/startertests/mediumglass.mcstructure にある MCStructure ファイルが使用されることになります。

この JavaScript の残りの部分では、ゲームテストの Helper クラスを使用して simpleMobTest 関数内のテストを実際に表しています。

テスト関数

テスト関数では、実際にテストが実行されます。 テスト関数では、実行するテストの初期条件を設定すると共に、基準を評価する追加のテスト関数を返します。

テスト例:

import * as GameTest from "mojang-gametest";
import { BlockLocation } from "mojang-minecraft";

function simpleMobTest(test) {
  const attackerId = "fox";
  const victimId = "chicken";

  test.spawn(attackerId, new BlockLocation(5, 2, 5));
  test.spawn(victimId, new BlockLocation(2, 2, 2));

  test.assertEntityPresentInArea(victimId, true);

  // Succeed when the victim dies
  test.succeedWhen(() => {
    test.assertEntityPresentInArea(victimId, false);
  });
};

このテスト関数で注意すべき点:

  • spawn メソッドを使用して、テスト内で新しいモブを作成できます。
  • spawn のような API で使用される座標は、.MCStructure のストラクチャー ブロックを基準とした相対座標です。
  • assert 関数は、メソッド内に記述されている条件が true でない場合にコードの実行を停止させます。 このコードは、ニワトリ エンティティが構造物内からいなくなったことをアサートします (assertEntityPresentInArea メソッドが false の場合、この関数はエンティティがいなくなったことをアサートします)。 構造物のいずれかのブロック内にニワトリが見つかった場合は、assert コードがエラーをスローします。 しかし、ニワトリが見つからない場合は test.succeed 行まで進み、テストは合格となります。

JavaScript StarterTests.js ファイルの全文は次のようになります。

import * as GameTest from "mojang-gametest";
import { BlockLocation } from "mojang-minecraft";

function simpleMobTest(test) {
  const attackerId = "fox";
  const victimId = "chicken";

  test.spawn(attackerId, new BlockLocation(5, 2, 5));
  test.spawn(victimId, new BlockLocation(2, 2, 2));

  test.assertEntityPresentInArea(victimId, true);

  // Succeed when the victim dies
  test.succeedWhen(() => {
    test.assertEntityPresentInArea(victimId, false);
  });
};

// Registration Code for our test
GameTest.register("StarterTests", "simpleMobTest", simpleMobTest)
        .maxTicks(410)
        .structureName("startertests:mediumglass"); /* use the mediumglass.mcstructure file */

サンプルを完成させるには、ストラクチャー ブロックを使用してテストを定義しましょう。

そのためには、Minecraft を開いてクリエイティブモードで新しい世界を開始し、環境を構築します。 以下はゲームテスト用に構築した、ガラス ブロック製のシンプルなガラスの囲いです。

Minecraft 内のガラスの構造物

次は、これを構造物としてエクスポートしましょう。 Minecraft で次のコマンドを実行します。

/give @s structure_block

そうすると、ストラクチャー ブロックが操作できるようになります。 作成した構造物の隣にストラクチャー ブロックを置き、ストラクチャー ブロックのポップアップ ウィンドウを使用して構造物を囲います。 それを mediumglass.mcstructure としてエクスポートします。

Minecraft のストラクチャー ブロック インターフェイス

ビヘイビアー パック内で structures フォルダーに移動し、startertests というサブフォルダーを作成します。

この mediumglass.mcstructure ファイルを startertests サブフォルダー内に配置します。 JavaScript コードで指定した名前と一致するように、すべてを小文字にしてください。 mediumglass.mcstructure ファイルをそのフォルダーにコピーします。 フォルダーは次のようになります。

デフォルトのスターター フォルダーのレイアウト

ゲーム内でのテストの実行

ゲームテストのビヘイビアー パックが完成したら、Minecraft 内で試してみましょう。 そのためには、新しい Minecraft の世界を作成します。 その新しい世界で、クリエイティブモードを開始してゲームテスト フレームワークの試験的機能を有効にしましょう。 ゲームテストのビヘイビアー パックを自分の世界に追加します。 手順を間違えていなければ、世界を作成したときに Starter Hello World ゲームテスト ビヘイビアー パックが表示されるはずです。

ゲームテストを含む Minecraft ビヘイビアー パック

Starter Hello World ビヘイビアー パックのタイルをクリックして有効にします。

重要

環境内で以下に挙げる追加の変更点も指定しましょう。

  • フラットな世界を選択する
  • 難易度はノーマルのままにする (ピースフルの世界ではモブの動作が異なります)

世界が読み込まれたら、/gametest コマンドを使用してテストを実行します。

特定のテストを実行するには、次のように /gametest run <classname>:<testName> を使用します。

/gametest run startertests:simpleMobTest

次のステップ

ここでは最初のゲームテスト フレームワークのテストを作成しました。 ゲームテストでは、クリエイターがコンテンツを拡張し、エンティティを動かし、ゲームプレイのメカニズムを検証することができます。 ゲームテスト フレームワークの内容について詳しくは、以下のゲームテスト API をご覧ください。