
本セッションでは講演者として、アトラス コンシューマソフトウェア局 第二プロダクション(ペルソナチーム) チーフプログラマーの埜渡貴裕氏が登壇。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a8528966f775f76f7e680393e81c7f280.jpg?x=767)
『ペルソナ3 リロード』(以下、『P3R』)の開発で実装された、ゲームの開始からエンディングまでを自動で操作しつつ、不具合チェックを行うことができるシステム“自動プレイ”の概要と、それを運用したことによる効果や実績が語られた。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/abd83d9029a548a692124a94c30b82a30.jpg?x=767)
自動プレイには行動のログを収集する仕組みも実装されており、そのログからゲームを効率的に進め、チェック範囲を広げる行動をネットワーク経由で指示する機能“おすすめ行動サーバー”も搭載。終盤では、こちらの実装および運用により、QA作業の大幅な工数削減&安定性の向上が実現されたことにも触れられた。
自動プレイとは?
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/abb0dc0f70ccaf9e74b8f4a6097166672.jpg?x=767)
昨今のゲームはデータ量が膨大なため、チェックが必要な要素は大幅に増加。人が直接確認する形ではとても対応しきれないため、同シリーズでは『ペルソナ5 ザ・ロイヤル』(以下、『P5R』)より導入されている。自動プレイを実装するに当たり、埜渡氏が心がけていることは以下の3点。
- 自動プレイが原因でゲーム本編作成を妨げないこと
- なるべく汎用的にいろいろなチェックができるようにすること
- データや仕様の変更になるべく影響されない形にすること
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/adf866d5ff0400eab017094a907815c1d.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a1ae95c5c3ee5fa725439942dc6117b67.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/aaad0427b86bb2be043930309759f3e70.jpg?x=767)
実装内容について
- 自動プレイ本体のベースの実装
- 自動プレイのコマンドによる操作の拡張
- 自動プレイ中のログ収集
- 自動プレイを利用した自動テスト
自動プレイ本体のベースの実装
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a1fcd1c2b46e081d301979fcc6ce595a6.jpg?x=767)
また、自動プレイ自体の信頼性を高めるために、ゲーム進行のための入力は“パッド入力からのみ”で行うなど、独自のこだわりについても言及。
細かい処理はパート単位に分けて個別で実装したそうで、『P3R』の場合はバトル、フィールド、イベントなど、37パートに分けて実装。各パートには優先度を設けており、複数のパートが重なった場合は、もっとも優先度の高いパートを実行する仕様になっているという。今回はその中から、フィールドパートとバトルパートの詳細が語られた。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a9586808a7cfc466e9b796dda15a9fc33.jpg?x=767)
フィールドパートの実装
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/af420f36285aafa5f2fea593251338d83.jpg?x=767)
キャラクターを自動で移動させるため、あらかじめ移動用のパスを用意し、そちらに従って移動させる方法もあるが、本作では別の手段を模索。コリジョン(3Dモデル同士の衝突)を回避をしつつ目的地を検索し、そちらに向かって移動する操作として、“イベントヒットへのアクセス”が設定されている。
イベントヒットとはNPCや扉といった何らかのアクションが発生する箇所のこと。直線移動で到達できる範囲内にある目的地(イベントヒット)を自動で検索し、そちらに向かって移動できるようになった。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a6bce8eb2e4ff01b51b9cc6ccfb066d44.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a1aa93f1bbaff3caa9376197235825956.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/ae28506a72ca8c40cac4849a101d3feac.jpg?x=767)
さらにナビゲーションシステムによるパス移動も組み合わせて、フィールドパートでの自動プレイは完成を迎えた。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a4f7f3ec0f6f3e89e1e9c2b1232160381.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a8b5d81d847920fe7afff390cbb236a6b.jpg?x=767)
バトルパートの実装
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a39105f516ebb9a0e0023962de8a80d46.jpg?x=767)
このたびのセッションでは、数ある行動指示の中から“敵の弱点をつく行動”がピックアップされ、動画とともに紹介された。
自動プレイのコマンドによる操作の拡張
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a619e394ed18128b239ce4dd043f8ece4.jpg?x=767)
コマンドは“決定ボタンを押す”などの入力単位ではなく、“メニューを開く”、“特定のアイテムを選択する”といった行動単位での実装になったそうだ。まずはコマンド実行を管理するCommandManagerに集積し、パート単位で所持するCommandWorkerで各コマンドを実行する形が取られた。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/ab5dcd54bd3b3eed9f052e3548346b4a2.jpg?x=767)
おすすめ行動サーバーとは?
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/adb225b2b6d3d2f67b5dc2815e4bf59eb.jpg?x=767)
参考映像では『P3R』の日常パートが例として取り上げられ、数ある行動パターンの中から“コミュイベント”の発生、“人間パラメータ”を上げる行動を優先するといった指示を確認できた。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a47b39dfc83857c9926ec5e2eaabbe1dd.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/ab8e67ceefd612faf5490926f52b8f79a.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/ac42a26b1c231d5b347c5e63bc6ac8b05.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/aff495eb8a9d0f502d2551c1bc8a882ad.jpg?x=767)
自動プレイを利用した自動テスト
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a1aed795f8e3ad18bc9d738301639a269.jpg?x=767)
とくに、同じシチュエーションを何度もくり返してデータを収集しなければならない作業では重宝されたそう。今回は自動テストの実装例として、“全カードを引き当てられるかの確認テスト”が紹介された。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/ab867eb62b97b8fba91bcbcddc9b38dd0.jpg?x=767)
運用結果の報告
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a7d05bba09f94276e7d853b0da3093ec6.jpg?x=767)
かなり初期の段階から実装を行い、ゲーム本編の開発に合わせて仕様などを調整。序盤は開発機3台で回していたが、バグなどを検証するQA期間に入るころには25台で対応した。昼夜問わず稼動させ続けたことで、最終的に412件の問題点を見つけ出すことに成功。そのうちS/Aランクのバグは168件だった。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a0a2824f0297d34155f0d4d571e45dc19.jpg?x=767)
続けて、自動テストの実装によるQAコスト削減結果についても、チェック項目別に削減できた日数が公開された。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/a425aa02eca07545b19ae5e28bca22f62.jpg?x=767)
ピックアップされたのは、“コマンドの記録・再生の活用”、“おすすめ行動サーバーのバリエーション”、“収集したログの活用”、“B/Cランクバグの検出”という4つの切り口で、最後にそれぞれの改善点にも触れてセッションは終了した。
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/af758508a8297907c08833888deaca3d5.jpg?x=767)
![[IMAGE]](https://cimg.kgl-systems.io/camion/files/famitsu/15398/aaa93f2e9cd7ae99794552fa1c80e489c.jpg?x=767)