Collision Checker によるコリジョンチェック
- 環境の構築
- 作業フォルダの作成
- データの事前準備
- マップ画像の用意
- マップスキャンデータの配置
- ゲームバイナリの配置
- 座標変換係数の計算とパラメータの追記
- コードの変更
- template/custom_util.py への変更
- template/debug_launcher.py への変更
- コリジョンファイルの生成
- 目標点の配置確認
- テストデータ一式の配置
- 複数の PC に環境を構築 ※不要
- コリジョンチェックの実行
- ビューワーでの結果確認
環境の構築
Playable! Collision Checker > 環境設定 を参照して、Collision Checker 用の Python 仮想環境を構築してください。
作業フォルダの作成
新規ゲームへの対応手順 > はじめに を参照して、ダウンロードした Collision Checker のソースコードフォルダのコピー、およびフォルダ名とインポート先の変更を行ってください。
なお、{新規ゲーム名}
の部分は template
としてください。
データの事前準備
マップ画像の用意
Third Person テンプレートにはマップ画像に相当するものが存在しないため、エディタ上でスクリーンショットを撮ったものをマップ画像として使用します。
- エディタ画面左上の設定で、「並行投影」を「上」、「表示モード」を「ライティングなし」を選択し、エリア全体が画面に収まるように拡大/縮小してからスクリーンショットを撮ってください。図のように x 軸の正方向が右を向くようにしてください。
- 用意した画像のファイル名を
template.png
とし、Python/res
以下に配置してください。
マップスキャンデータの配置
事前準備 > マップスキャンデータの準備 に従って作業を行ってください。
作成するフォルダ名 ({ゲーム ID}_{テスト ID}
) は何でもいいですが、ここでは template_test
とします。
ゲームバイナリの配置
ゲームプロジェクトの作成と自動テスト対応 > パッケージ化 で作成済みのゲームバイナリを含む WindowsNoEditor
フォルダ全体を Python
以下に配置してください。
座標変換係数の計算とパラメータの追記
事前準備 > 座標変換係数の計算とパラメータの追記 に従って作業を行ってください。
Name
の値は Third Person Template
としてください。
コードの変更
template/custom_util.py
copy_savefile()
テスト対象マップに対応したセーブデータを、コリジョンチェックのデータフォルダからゲーム側のセーブデータフォルダにコピーする関数です。
以下の理由から、Third Person テンプレートにおける当関数は None
を返すだけの関数にしてください。
- Third Person テンプレートにはセーブデータが存在しないので、ファイルをコピーする操作は必要ない
- 関数のコメントに記載がある通り、セーブデータが存在しないゲームでは
None
を返す必要がある
def copy_savefile(folder_path: str, env_path: str, map_name: str) -> str:
return None
template/debug_launcher.py
DebugLauncher.step()
self.level = hoge
の部分で、ゲームから毎フレーム送信される情報を参照し、現在ゲームプレイ画面 or タイトル画面などの非ゲームプレイ画面にいるのかを判定しています。
ですが、Third Person テンプレートはゲーム画面しか存在しないため判定する必要がありません。以下のように常に game
となるようにしてください。
self.level = "game"
DebugLauncher.load_savedata_async()
ゲーム起動後にロード画面を操作するための関数です。 Third Person テンプレートではタイトル画面やロード画面が存在しないため、以下のようにこれらに関わる操作を全てコメントアウトしてください。
def load_savedata_async(self, callback: Callable = None) -> bool:
if self.status == "waiting":
"""
if self.level == "game":
self.order_list.append(OpenGameMenu())
self.order_list.append(SelectMenuButton("タイトルへ戻る"))
self.order_list.append(WaitBackToTitle())
self.order_list.append(WaitSec(1))
self.order_list.append(SelectMenuButton("ロード", check=False))
self.order_list.append(WaitSec(1))
self.order_list.append(SelectSaveData(self.savename))
"""
# ここより下は変えない
self.order_list.append(WaitLoading())
self.state = "Executing Order"
self.callback = callback
return self.status == "waiting"
DebugLauncher.option_debugfunc_setup_async()
ゲーム画面へ遷移した後、テストに必要なデバッグ機能などの設定操作を行うための関数です。 Third Person テンプレートではデバッグ機能やゲームオプションが存在しないため、以下のようにこれらに関わる操作を全てコメントアウトしてください。
def option_debugfunc_setup_async(self, callback: Callable = None) -> bool:
if self.status == "waiting":
if self.level == "game":
"""
self.order_list.append(SwitchDebugMenu())
self.order_list.append(WaitSec(1))
self.order_list.append(SelectMenuButton("EnemyAI停止", check=False))
self.order_list.append(WaitSec(1))
self.order_list.append(SelectMenuButton("Player無敵切り替え", check=False))
self.order_list.append(WaitSec(1))
self.order_list.append(SelectMenuButton("バグコリジョン切り替え", check=False))
self.order_list.append(WaitSec(1))
self.order_list.append(SelectMenuButton("マップチェンジトリガー切り替え", check=False))
self.order_list.append(WaitSec(1))
self.order_list.append(SelectMenuButton("全ての扉を開放する", check=False))
self.order_list.append(WaitSec(1))
self.order_list.append(SwitchDebugMenu())
"""
# ここより下は変えない
self.callback = callback
return self.status == "waiting"
class SwitchDebugMove
Map Scanner における template/custom_order.py
> class SetDebugMove
と同様の変更を行ってください (参照)。
コリジョンファイルの生成
事前準備 > コリジョンファイルの生成 に従って作業を行ってください。
データフォルダの名前やマップ ID を本ドキュメントに合わせているならば、
--map
オプションには template
を、--data
オプションには ./data/template_test/
を指定すればよいです。
--dist
オプションで指定する値は、Third Person テンプレートにおいても 75
で問題ありません。
目標点の配置確認
事前準備 > 目標点の配置結果の確認 に従って作業を行ってください。
テストデータ一式の配置
事前準備 > テストデータ一式の配置 に従って作業を行ってください。
複数の PC に環境を構築
Third Person テンプレートのマップは狭いので、複数の PC をつかって並列実行する必要はありません。
もし並列実行を試したい場合は 事前準備 > 他クライアント PC への展開 に従って作業を行ってください。
コリジョンチェックの実行
テスト実行方法 のドキュメントに従って作業を行ってください。
データフォルダの名前やマップ ID を本ドキュメントに合わせているならば、
-m
オプションには template
を、-d
オプションには ./data/template_test/
を指定すればよいです。
ビューワーでの結果確認
後処理 のドキュメントに従って作業を行ってください。
以下のような結果が得られれば完了です。
Third Person テンプレート上の青い立方体は、プレイヤーを衝突させることで押すことができます。 その結果、本ツールで「壁」とみなす対象の位置が変わることになるため、接触点 (黄緑色の直方体) の位置が上図とは異なる場合があります。