Behavior Tree Maker 操作マニュアル
Behavior Tree Maker は新規ゲームへの対応時に主に使用するものですので、操作マニュアルと新規ゲームへの対応手順を併せて記述します。
はじめに
このマニュアルでは、Behavior Tree Maker の使用方法を説明します。 このツールを使用すると、ゲームの操作を自動化し、指定した行動を実行するエージェントを作成できます。
エージェントの作成プロセスは以下の順序で進行します。
- 基本操作の作成:ゲームに特有の基本的な操作を定義します。これには、移動、ジャンプ、攻撃などのアクションが含まれます。
- GPB データ情報の作成:ゲームから GPB(Game-Python Bridge)を通して取得可能な情報を定義します。これは、キャラクターの位置、敵の存在、目標の状態など、ゲーム内でエージェントが利用可能な情報を指定するためのフォーマットです。
- ビヘイビアツリーの生成:上記の基本操作と GPB データ情報を元に、エージェントの行動を制御するビヘイビアツリーを生成します。
これらのプロセスは、本ツール、および本ツールを通して、指定したゲームファイル、OpenAI API を使用して行います。
最終的に作成されたエージェントは指定しているワークスペースに保存されます。
ツールの起動
- チャットウインドウのメニューバーの[ツール]→[Behavior Tree Maker の起動]を選択してツールを起動します。
- ツールが起動すると、Behavior Tree Maker ウインドウとゲームウインドウ(ディスプレイの右下に移動)が表示されます。
ツールの終了
- メニューバーの[ファイル]→[Behavior Tree Maker の終了]を選択して終了します。
1. ゲームの基本操作の作成
ゲームの基本操作は、ゲーム内で特定の基本機能を実行する際のパッド操作を設定します。
- [ビヘイビアツリー作成に必要なデータ]→[ゲームの基本操作]をクリックすると、ゲームの基本操作画面に入ります。
新たに基本操作を作成するには二つの方法があります。
1.1.a. 操作の自動作成
LLM とゲームの操作マニュアルを使用して一括で操作を作成することができます。
- 【LLM を利用して仕様書から生成】ボタンをクリックすると「仕様書からゲームの基本操作を生成」ウインドウが表示されます。
- [対象ブラットホーム]を選択し、マニュアルからゲームの基本操作が記載されている部分を[ゲーム操作の仕様]フィールドにコピーして、【LLM に解釈させて基本動作を生成】ボタンをクリックします。
- LLM が完全に応答するまで待つと、「LLM の出力」フィールドに応答メッセージが表示されます。
この時、返された json に基づいて自動で操作が生成されます。
- 右上の × をクリックしてウインドウを閉じると、[未登録の操作]リストに LLL が作成した新しい操作が追加されています。
1.1.b. 操作の手動作成
- 【新規操作を追加】ボタンをクリックすると新規操作ダイアログが表示されます。
- 名前欄に作成したい操作の名前を入力します。
例えば「Test」と入力して【追加】をクリックすると、Test という操作が生成されます。
- [未登録の操作]リストの中から生成した操作をクリックすると、新しい操作の編集画面になります。
- 新しい操作に紐づけたいパッド操作をクリックして設定してください。
例えば、A ボタン(Unreal Engine 対象)をクリックすると、FaceButtonBottom がパッド操作に追加されます。
1.2. 操作の登録
- [未登録の操作]または[登録済みの操作]リストの中からチェックしたい操作をクリックすると、編集画面に対応する操作が表示されます。
- ゲームを使った動作確認のいずれかのボタンをクリックすることにより、ゲームウインドウのキャラクターで動作確認することができます。
例えば「Dodge(回避)」を選んだ場合、【一回だけ入力する】ボタンをクリックすると、ゲームウインドウでキャラクターが回避動作を一回実行します。
- 操作性の違いにより、A ボタンを連続して押しても連続ジャンプは起こらないですが、移動などの動作ではボタンを連続的に押す必要があります。
【一回だけ入力する】【入力し続ける】【入力をやめる】ボタンで操作の連続性をテストし、必要に応じて[この操作は連続入力として扱う]チェックボックスを ON にするかどうか決定してください。
- 操作性の違いにより、A ボタンを連続して押しても連続ジャンプは起こらないですが、移動などの動作ではボタンを連続的に押す必要があります。
- [登録]チェックボックスを ON にすると、操作が[登録済みの操作]リストに移動します。
- 登録済みの操作だけがビヘイビアツリーを構成する基本要素として使用することができますので、新規に作成した必要な操作には必ず実施してください。
2. GPB データ情報の作成
GPB データは、ゲーム環境情報をリアルタイムで取得する唯一の方法です。
利用するにはゲームから GPB(Game Python Bridge)を通して取得可能な情報を定義しておく必要があります。
- [ビヘイビアツリー作成に必要なデータ]→[ゲーム内情報]をクリックすると、GPB データ情報画面に入ります。
2.1. GPB データ情報の取得
- 【現在通信中のゲーム内情報を取得】ボタンをクリックすると、現在実行中のゲームウインドウで GPB(Game Python Bridge)が返すデータをキャプチャし、「ゲーム内情報」に対応する関数を生成します。
- 注意: この機能は出現したことのある GPB データのみをキャプチャすることができます。 ゲーム画面に入っていない場合は、キャラクターの座標関数はキャプチャされません。 また、敵に遭遇したことがない場合、敵の関数はキャプチャされません。 ビヘイビアツリーの生成を保証するためには、可能な限り多くの場所に行くことが必要です。
- デフォルトでは参照されますが、[参照]チェックボックスを OFF にすると、[参照しないパラメータ]リストに移動します。
- 参照されるゲーム内情報だけがビヘイビアツリーを構成する基本要素として使用することができますので、不要な GPB データは[参照]を外すようにしてください。
2.2. GPB データ情報の説明の追加
生成された関数はデフォルトでは「説明」が空ですが、LLM を使用して「ゲーム内情報」に対応する関数に自動的に説明を追加することができます。これにより、ビヘイビアツリー生成時に LLM がこれらの関数をより良い精度で利用できるようになります。
- 【LLM を利用して説明を記述】ボタンをクリックすると「仕様書からゲーム内情報を生成」ウインドウが表示されます。
- マニュアルから GPB データの仕様が記載されている部分を[ゲーム内情報の仕様]フィールドにコピーして、【LLM に解釈させてゲーム内情報を生成】ボタンをクリックします。
- LLM が完全に応答するまで待つと、「LLM の出力」フィールドに応答メッセージが表示されます。
この時、返された json に基づいて自動で GPB データの関数説明が追加されます。
- 右上の × をクリックしてウインドウを閉じます。
3. ビヘイビアツリーの生成
ビヘイビアツリーは、トリガー と アクション という二つのノードで構成されます。
まずは基本的なビヘイビアツリーのノードを作成する必要があります。 LLM を利用して、これまでに作成したゲームの基本操作とデータ情報を使用し、これらのノードを自動生成することができます。
3.1. アクションノードの作成
アクションノードは、基本操作を実行するノードです。
実行時に対応するキーデータを返すための python コードから直接構成される関数です。
- [ビヘイビアツリー作成に必要なデータ]→[アクション]をクリックすると、アクション画面に入ります。
3.1.a. アクションノードの自動作成
「ゲームの基本操作」から、簡単なアクションノードを自動的に生成することができます。
- 【ゲームの基本操作から生成】ボタンをクリックすると、基本操作がアクションノードに変換されます。操作の説明も自動的にノードの説明に追加されます。
- 十分な数の基本操作が用意されている状態で実施してください。
- 生成されるのは最も簡単なノードで、固定されたキーデータを返す形のコードです。
- ビヘイビアツリーを作成する時に、既存のアクションノードを直接利用することができます。 適切なアクションがない場合、必要に応じて新しいアクションノードが自動的に生成されます。
3.1.b. アクションノードの手動作成
python のコードに詳しい場合は、コードを直接編集することでアクションノードをカスタマイズすることもできます。
また、関数に含まれる formats パラメータと variables_buffer パラメータを使用して、アクションノードをより多く設計することができます。
- 【新規アクションを追加】ボタンをクリックすると新規アクションダイアログが表示されます。
- 名前欄に作成したいアクションの名前を入力します。例えば「Test」と入力して【追加】をクリックすると Test というアクションが生成されます。
- [アクション一覧]リストの中から生成したアクションをクリックすると、アクションの編集画面になります。
- 新しいアクションの[説明]と[コード]をそれぞれのフィールドに入力してください。
例えば、「指定された目標に向かって移動する」アクションノードである MoveToTarget の場合は図のような入力になります。このコードの関数は、プレイヤーの現在座標を formats から取得、あらかじめ設定された目標座標を変数の共通空間 variables_buffer から取得し、2 方向のベクトルを同時に制御することで移動アクションを実現しています。
- アクションノードの関数は、{"FaceButtonBottom": 1} などの操作を含む辞書を返す必要があります。
3.2. トリガーノードの作成
トリガーノードは、GPB データを使用して、ゲーム内の状況を判断するノードです。 GPB データは、ゲーム内の状況を判断するための情報を提供します。
- [ビヘイビアツリー作成に必要なデータ]→[トリガー]をクリックすると、トリガー画面に入ります。
3.2.a. トリガーノードの自動作成
「ゲーム内情報」から、簡単なトリガーノードを自動的に生成することができます。
- ブーリアン型のデータは条件ノードとして扱うことができます。例えば、「地面にいるかどうか」「攻撃範囲内にいるかどうか」などです。
- 【ゲーム内情報から生成】ボタンをクリックすると、ブーリアン型の GPB データ情報がトリガーノードに変換されます。GPB データ情報の説明も自動的にノードの説明に追加されます。
- 十分な数の GPB データ情報が用意されている状態で実施してください。
- 生成されるのは最も簡単なノードで、固定されたフォーマットを返す形のコードです。
- ビヘイビアツリーを作成する時に、既存のトリガーノードを直接利用することができます。 適切なトリガーがない場合、必要に応じて新しいトリガーノードが自動的に作成されます。
3.2.b. トリガーノードの手動作成
python のコードに詳しい場合は、コードを直接編集することで対応するトリガーノードをカスタマイズすることもできます。
また、関数に含まれる formats パラメータと variables_buffer パラメータを使用して、トリガーノードをより多く設計することができます。
- 【新規トリガーを追加】ボタンをクリックすると新規トリガーダイアログが表示されます。
- 名前欄に作成したいトリガーの名前を入力します。例えば「Test」と入力して【追加】をクリックすると Test というトリガーが生成されます。
- [トリガー一覧]リストの中から生成したトリガーをクリックすると、トリガーの編集画面になります。
- 新しいトリガーの[説明]と[コード]をそれぞれのフィールドに入力してください。
例えば、「指定された敵だけ検出する」トリガーノードである is_custom_enemy_around の場合は図のような入力になります。このコードの関数は、周囲の敵の情報を formats から取得、あらかじめ設定された敵の名前を変数の共通空間 variables_buffer から取得し、指定された敵だけ検出するトリガーノードを実現しています。
- トリガーノードの関数は、True または False を返す必要があります。
3.3. ビヘイビアツリーの作成
- [ビヘイビアツリー]をクリックすると、ビヘイビアツリーエディタに入ります。
3.3.a. ビヘイビアツリーの自動作成
チャットボットからビヘイビアツリーを自動的に生成することもできますが、本ツール r から自動作成することもできます。
- 【LLM を使ってノードを自動生成】ボタンをクリックすると、「LLM によるビヘイビアツリー生成」ウインドウが表示されます。
- 「作成するノードの名前」と「実現したい動作の説明」を入力して、【生成】をクリックします。
- LLM が完全に応答するまで待つと、[LLM の出力]フィールドに応答メッセージが表示されます。
この時、返された json に基づいて自動でビヘイビアツリーが生成されます。
- 右上の × をクリックしてウインドウを閉じると、[ノード一覧]リストに LLM が生成したビヘイビアツリーが追加されています。
3.3.b. ビヘイビアツリーの手動作成
ビヘイビアツリーを手動で作成することもできます。
例として、以下のようなビヘイビアツリーを作成します。
- トマスがそばにいると、キャラクターはジャンプを連続する
- トマスがそばにいないと、キャラクターは攻撃動作を連続する
- 【ノードを新規に追加】ボタンをクリックすると新規ノードダイアログが表示されます。
- 名前欄に作成したいビヘイビアツリーの名前を入力します。例えば「Test」と入力して【追加】をクリックすると Test というビヘイビアツリーが生成されます。
- [ノード一覧]リストの中から生成したビヘイビアツリーをクリックすると、ビヘイビアツリーエディタになります。
- [分類]を変えると、ノード一覧の表示を変えることができます。
- ビヘイビアツリーエディタでマウスのミドルボタン(マウスホイール)を押したまま移動させるとビヘイビアツリー全体の位置を移動させることができます。
左下のミニマップをクリックすると、ビヘイビアツリーが中央位置に戻ります。
- [新規ノードの追加]から、以下のノードを追加します。
・「Composite」→「Selector」
・「Composite」→「Sequence」
・「Action」→「Jump」
・「Action」→「Attack」
・「Action」→「WaitOneSecond」
・「Trigger」→「is_target_around」 - 図のようにノードを配置、接続して、ビヘイビアツリーを作成します。
- マウスの左ボタンを押しながらノードをドラッグすると、ノードを移動することができます。
- ノードの黄色い丸をリンクラインにドラッグすると、ノードを接続することができます。
- リンクラインが間違っている場合は、Ctrl キーを押しながらマウスの左ボタンをクリックしてリンクラインをドラッグし、正しいノードに再接続することができます。
- 【整列】ボタンをクリックすると、ノードを整列してメモリに保存します。
- テスト実行エリアの【Param】ボタンをクリックして、ビヘイビアツリーに含まれているノードのパラメータをまとめます。
- is_target_around のトリガーのコードには、TargetPos が使用されています。
- ここで、トマスのマップ名と座標を TargetPos に設定します。["PL_010VIL",15732,6290,-353]
- is_target_around のトリガーのコードには、TargetPos が使用されています。
- テスト実行エリアの【Start】ボタンをクリックして、ゲームウインドウで作成したビヘイビアツリーを実行します。
3.4. ビヘイビアツリーの保存
- メニューバーの[ファイル]→[保存]を選択してビヘイビアツリーを保存します。
本ツールを閉じた時も、ビヘイビアツリーは自動的に保存されます。
ビヘイビアツリーの保存と同時に、新規追加および削除されたビヘイビアツリーの情報を、
Python/data/work_space/command
配下のコマンド関連ファイルに反映して保存します。