テストプレイを自動化しよう ー Game Simulation の Virtual Player を作成する

DYLAN SCANDINARO Anonymous
Dec 11, 2020|6 Min
Hero image

Virtual Player(ゲームをプレイするエージェント)を作成して、Game Simulation でテストプレイを大規模に実行することで、テストプレイを容易に自動化できます。iLLOGIKA、Furyion、Ritz Deli の 3 社におけるケーススタディをお読みいただき、各社がどのように Virtual Player を作り、Game Simulation に約 40,000 時間(4.5 年)分の自動化されたテストプレイを 実行させたか、その方法を学びましょう。

プレイヤーが自分だけの体験を作り上げるための自由度が残されているという、ゲームを楽しくする要因は、そのままゲームをテストするの困難さにつながっています。そのため、ゲームにはバグや設計上の欠陥が露呈する可能性のある領域がかなり残されてしまいます。開発者は、問題を解決し、確実に納期を守るために、頻繁に、かつ広範囲にテストを行わなければなりません。

これまでは、開発者はカバレッジは低いがテストの頻度を高くする(CI パイプラインでのユニットテスト)か、カバレッジを高くする代わりにテストの頻度を下げる(大規模リリース前のテストプレイ)かのどちらかを選んでいました。

私たちは、開発者がテストプレイのカバレッジとユニットテストの頻度を両立させてテストできるように、Unity Game Simulation を開発しました。Unity Game Simulation を使用すると、開発者はクラウド上で自動化されたテストプレイを実行することができます。Unity Game Simulation は、以下の手順で使うことができます。

Virtual Player(ゲームをプレイするエージェント)を作成する。

Game Simulationパッケージを使って、ゲームにシミュレーションのための仕組みを搭載する。

  • リモートで設定可能なパラメーターを実装して、ゲームのさまざまなバリエーションをシミュレートできるようにする。
  • 設計上の質問に答えるために必要なデータを記録するためのメトリクスを実装します。
  • Game Simulation パッケージを使用して、ゲームのビルドを作成し、Unity の提供するサーバーにアップロードします。

    Game Simulation のユーザーインターフェース(UI)から、数千回のテストを実行する。

    このブログ記事では、1 つ目のステップである、自動テスト用の Virtual Player の作成に焦点を当てています。2 つ目から 4 つ目のステップは簡単で、Game Simulation のドキュメンテーションにも記載されています。Game Simulation は、今すぐ無料でお試しいただけます

    簡単に作れる Unity Game Simulation の Virtual Player

    Virtual Player は、実際のプレイヤーの入力をエミュレートして、ゲームのいくつかの要素をテストするためのものです。ゲームが例外を発生させずに 60 分間実行できるかどうかを検証するなどの簡単なテストでは、Virtual Player は、シーンを起動してランダムなアクションを実行する数行のコードを含む C# スクリプトとして、簡単に記述できます。

    すべての武器がおおよそ同じ強さであるとか、すべてのステージがクリア可能であるとかのより複雑なテストを行う場合は、ノンプレイヤーキャラクター(NPC)を作るために一般的に使われるメソッドで作成することができます。これには次のものが含まれます。

    • ヒューリスティックのためのスクリプト:非常に単純なルールまたはアルゴリズムを含むスクリプト
    • ビヘイビアツリー:条件やタスクで構成された計画の視覚的な表現
    • 有限ステートマシン:Virtual Player が切り替えて使うことのできる 2、3 種類の状態(例:探索、攻撃)を持つスクリプト
    • Unity AI Planner:直感的な Unity エディターの UI を使った、視覚的にプランニングを行うためのフレームワーク
    • Unity ML-Agents Toolkit を使った強化学習と模倣学習:ML-Agents を使って Jam City 社の『Snoopy Pop』をプレイする Virtual Player を作成する方法をこちらの記事で解説しています。

    ここからは、3 社のスタジオの事例から、これらのスタジオがどのように Virtual Player を作成し、合計で 40,000 時間近いテストプレイを Unity Game Simulation に行わせたのかを見ていきたいと思います。特に注目するに値することは、これら 3 社のスタジオすべてにおいて、Virtual Player を作成するためには比較的単純なアプローチを取ったにも関わらず、Game Simulation を利用することで莫大な価値を生み出したということです。

    Ritz Deli 社:ヒューリスティック(貪欲法)

    独立系スタジオの Ritz Deli 社は、50 人以上のキャラクターを使ったつないで消すパズルゲーム『Eraser Blast』を開発しました。このゲームでは、登場するキャラクターにそれぞれゲーム中で違った特徴を持たせています。Ritz Deli 社は Unity Game Simulation を使用して何百ものシミュレーションを実行し、各キャラクターが経験値レベルの上昇に応じて、より多くのスコアとコインを発生させるようになっているかを確認しました。

    Ritz Deli 社の CTO 兼技術リーダー、Eric Jordan 氏はつないで消すパズルを解くことができる Virtual Player を作成する必要がありました。彼は、シンプルなヒューリスティックによる貪欲法に基づいた C#スクリプトで Virtual Player を実装しました。『Eraser Blast』では、このアルゴリズムは、同じタイプのバブルが作る可能な限り長いチェーンとのマッチを取ります。具体的には、次のような手続きです。

    すべての可能な 1 つだけのバブルの選択の集合を作る。 [@portabletext/react] Unknown block type "__block", specify a component for it in the `components.types` prop [@portabletext/react] Unknown block type "__block", specify a component for it in the `components.types` prop

    可能性のあるマッチの数が最も多い、有効なバブルの集合からバブルを選ぶ。

    ステップ 1 と 2 を有効なマッチとなるバブルがなくなるまで繰り返す。

    獲得されたスコアとコインの合計のメトリクスを更新する。

    iLLOGIKA 社:スクリプトによるビヘイビアツリー

    iLLOGIKA 社は、プレイヤーによる対戦型(PvP)ランニングゲーム『Rogue Racers』を開発したスタジオです。プレイヤーはパワーアップを含むカードのデッキを構築し、レース中に使用します。iLLOGIKA 社は、すべてのカードの組み合わせをテストし、強すぎるカードやデッキがないことを Game Simulation を使用して確認しました

    iLLOGIKA 社の開発者は、C# スクリプトを使って Virtual Player を作成しました。次のような手順となります。

    Virtual Player にレイキャストを行わせ、向こうからやってくる障害物を検出して、レーンを切り替えたり、ダッキングしたり、ジャンプしたりして回避することで、レースの最後まで上手く到達できるようにする。

    プレイヤーの現在のライフ、他のプレイヤーとの相対的な位置、カードの能力など、ゲームの状態に応じてカードを使用するタイミングを記述した一連のルールを追加する。 [@portabletext/react] Unknown block type "__block", specify a component for it in the `components.types` prop

    ステップ 1 および 2 に記述した各アクションについて、正しくないが選択可能なアクションを選び、現実のプレイヤーの予測不可能性を考慮する。

    Furyion 社:「Behavior Designer」を使ってビヘイビアツリーを作成

    Furyion 社は『Death Carnival』の開発会社です。このゲームは、ユニークな武器ソケットシステムを搭載した見下ろし型のシューティングゲームで、プレイヤーは武器、弾薬、武器モジュールの組み合わせを 10 万通り以上から選択することができます。選んだ組み合わせによって、ゲームプレイもまた違ったものとなってきます。

    Furyion 社の創業者でありディレクターでもある Herbert Yung 氏は、「Behavior Designer」と呼ばれるビヘイビアツリー作成ツールを使用して Virtual Player を作成し、武器、弾薬、武器モジュールの組み合わせごとにステージクリアまでの平均時間を推定しました。その後、Herbert は Unity Game Simulation を使って何千ものシミュレーションを実行して各武器ソケットの組み合わせをテストしました。これは、600 時間以上のプレイスルー時間の節約となりました。

    Herbert は、直感的な Behavior Designer の UI と Behavior Designer の多くの既製のタスクを活用して、Virtual Player を作成しました。手順は次の通りです。

    敵が射程距離内にいる場合は、敵を攻撃する。

    射程距離内に敵がいない場合は、射程距離内に敵が入ってくるまで出口に向かって移動する。

    ステップ 1 および 2 を敵が全滅するまで繰り返す。

    ステージの終わりにあるゲートまで移動していき、ステージが正常に終了したら、Application.quit() を呼ぶ。

    Behavior Designer でボットを作成する方法の詳細については、Behavior Designer のアセットストアページのドキュメンテーションを参照してください。

    アーリーアクセス版プレビュー:QA テストのための Unity Game Simulation

    Unity Game Simulation チームは、QA テストのための Virtual Player をはじめ、自動テスト用の Virtual Player の作成をお手伝いします。QA テストのための Virtual Player を作成するための新しいツールと機能をいち早くお試しになりたい方は、ぜひ Unity までお問い合わせください。

    始めよう

    Unity Game Simulation を始めるための詳しい情報については、こちらのページをご覧ください。無料でお試しいただけます。ご質問は Game Simulation チームまでお寄せください。