Goal Oriented Action Planning
新しいGOAPの作成
トップメニューを使用して、新しいGOAPを作成できます。

新しいタスクの作成
空のスペースを右クリックすると、新しいタスクを作成できます。
タスクには*ConditionとEffect(条件と効果)*のセットがあります。
これらは、ゲームのワールドの状態に直接関連しています。
quantum_codeソリューションで独自のワールドステートフラグのセットを定義できます。
- 条件は、それらの条件が現在のワールドの状態に一致する場合にタスクを実行することを指定します。
- 効果は、タスクの終了後にワールドの状態で何が変わるかを指定します。
条件/効果を定義せずに作成できるより単純なタスクはこちらです:

タスクの名前を変更するには、右クリックしてEdit Task Settingsを選択します。
Enterを押して変更を適用するか、Escを押して変更を破棄します。

条件/効果の指定
タスクの条件/効果を指定するには、左/右ボタンをクリックして、追加するワールドステートフラグを選択します。
選択されていないものは無視されます。

新しいワールドステートフラグをタスクに追加すると、True として扱われます。
そのため、Conditionsは、ワールドステートでそのフラグがTrueに設定されているかどうかを確認します。
効果は、ワールドステートでフラグをtrueに設定します。
これらの値を切り替えるには、フラグの横にある小さな緑の円を左クリックして、赤に切り替えます。

複数の条件と効果を追加し、それらの値を自由に切り替えることができます。

したがって、GOAPには多くのタスクが定義されており、さまざまな条件と効果のセットを持たせることができます。

タスクを無効にして、計画プロセス中に無視されるようにすることもできます。
それを行うには、任意のタスクを右クリックし、Disable Task を選択します:

左側のメニューを使用してタスク間を移動することもできます。

GOAP アクション
アクションの定義はBot SDKでの共通トピックです。visual editorでのアクションの使用方法についての詳細はこちらを参照してください。:Defining Actions
ミュート
自分のAIをテストする場合、ノードをミュートしていくつかのロジックを一時的に無効化することが便利な場合があります。ノードのミュートについての詳細はこちらを参照してください。: Muting
GOAPのコンパイル
作成したGOAPを実際に使用するには、実行した内容をコンパイルする必要があります。
コンパイルするには、2つのオプションがあります。

- 左ボタンを使用すると現在開いているドキュメントのみをコンパイルします。
- 右ボタンをしようすると,プロジェクトにあるすべてのAIドキュメントをコンパイルします。
GOAPファイルは、"Assets/Resources/DB/CircuitExport/GOAP_Assets"にあります。

自分のボットが使用するAIを選ぶ
作成したAIを使用するには、コンパイルしたアセットを参照します。
アセットをGUIDに応じてローディングするか、 アセットリンク を作成して選択するAIアセットを指し示すことで参照できます。
以下を参照してください。

GOAPコーディング
ワールドステートを宣言する
GOAPを使用する場合、タスクの条件と効果として使用する独自のワールドステートを定義する必要があります。
このフレームワークには、あらかじめ定義されたワールドの状態のセットがすでに付属しています。それを自分で置き換える必要があります。
プロジェクトでGOAP.qtnファイルを検索する必要があります。
"BotSDK/AI/GOAP"フォルダーのquantum.stateプロジェクトに配置されています。
ファイルを開くと、ワールドステートの定義が確認できます。
これは、それらを独自のフラグに置き換える場所です。
C#
enum GOAPWorldState : Int64 {
Root = 1, TargetSelected = 2, CarryingTarget = 4, TargetDelivered = 8
}
この列挙型を変更してquantum.stateプロジェクトをコンパイルすると、GOAP Editorで条件と効果の値が利用可能になります。
Goap Agentを使用する
エンティティ内でGOAPエージェントを宣言する方法は次の通りです:
C#
entity MyEntity[6] {
use Transform2D;
use DynamicBody;
use Prefab;
fields {
player_ref Player;
GOAPAgent GOAPAgent;
}
}
ただし、エージェントは構造体なので、エンティティ内で使用することに限定されません。
GOAPアップデーター
既に説明した通り、GOAP Visual Editorで一連のタスクを定義しました。
これらは、GOAPエージェントが目標状態を達成するために使用しようとするタスクです。
GOAPエージェントの状態を更新するには、GOAPUpdater
を使用する必要があります。
しかし、実際にアップデーターを使用する前に、使用できるタスクを認識する必要があります。
これは初期化プロセスの最初に行われます。
これは好きなように管理できますが、例として、単純なケースを分析しましょう。
最初に行うことは、 GOAPUpdater
をインスタンス化することです。
これは、任意のQuantumコードで次のように実行できます。
C#
private GOAPUpdater goapUpdater = new GOAPUpdater();
次に、エージェントのGOAP情報を使用して初期化する必要があります。
C#
goapUpdater.InitGOAPUpdater(runtimePlayerData.GOAPRoot);
GOAPRoot
(コンパイルプロセス後に生成されるファイル)にアクセスすることで、アップデーターはGOAPが抱えているタスクを認識できるため、実際に計画と行動するために使用する準備ができます。
ここで理解するべき重要な概念は、アップデーターが特定のタスクセットを使用するように初期化されると、同じアップデーターを使用して異なるタスクセットを持つGOAPエージェントを更新できないということです。
そのため、次のいずれかが必要になる場合があります:
- 別のGOAPRootを使用してGOAPUpdaterを再初期化します
- 他のタイプのエージェント用に新しいGOAPUpdatersを作成し、特定のGOAPRootsでアップデーターを初期化します
GOAPエージェントの目標を設定する
初期化されたアップデーターができたので、GOAPエージェントも初期化する必要があります。
それは2つの簡単なステップで行われます:
GOAPWorldState
を使用して新しい目標を作成します。目標は正の値と負の値の両方に対応しています。
C#
GOAPState goal = new GOAPState(); goal.Positive = (Int64)GOAPWorldState.TargetDelivered; goal.Negative = (Int64)GOAPWorldState.CarryingTarget;
Sエージェントの目標として設定する
C#
myEntity->Fields.GOAPAgent.SetGoal(goal);
GOAPエージェントの更新
以下の2点が既に備えられました:
- 初期化された
GOAPUpdater
- 初期化された
GOAPAgent
次に、両方を使用してボットを駆動してみましょう。
ゲーム固有のロジックに基づいてエージェントの現在の状態を更新する必要があります。
これを行うには、必要に応じて次のように更新します:
C#
myEntity->Fields.GOAPAgent.CurrentState = (Int64)state;
これに加えて、Updaterを使用してエージェントを更新し、新しい計画を作成し、現在の状態と目標 に基づいて一連のアクションを実行する必要があります。
C#
goapUpdater.UpdateGOAPAgent(f, &myEntity->Fields.GOAPAgent, (Entity*)myEntity);
Coding Actions
To create your own Actions, follow these instructions: Coding Actions
Defining fields values
Find here more information on the alternatives that you have when settings values to Actions/Decisions fields: Defining fields values.
AIParam
Find here more information on using the AIParam, which is useful if you want to have more flexible fields that can be defined in different ways: settings by hand or from Blackboard/Constant/Config Nodes: AIParam.
Visual Editor Comments
Find here more information on how to create comments on the Visual Editor: Visual Editor Comments.
Changing the compilation export folder
By default, assets generated by Bot SDK's compilation will be placed into the folder Assets/Resources/DB/CircuitExport
. See here how you can change the export folder: Changing the export folder.
Choosing the saved History Size
It is possible to change the amount of history entries saved on Bot SDK files. Find here more information on this matter: Changing History Save Count.
アクションのコーディング
自分のアクションを作成するには、こちらのインストラクションに従ってください。: Coding Actions
フィールド値を定義する
Actions/Decisionsフィールドの値設定に関する代替案についての詳細は、こちらを参照してください。Defining fields values:
AIParam
AIParamの使用方法についての詳細はこちらを参照してください。これは、様々な方法で定義できる柔軟なフィールドを用意する場合に便利です。手動での設定、またはBlackboard/Constant/Configノードから設定します。: AIParam
Visual Editorコメント
Visual Editorでのコメントの作成方法に関する詳細はこちらを参照してください。:Visual Editor Comments
コンパイルエクスポートフォルダを変更する
デフォルトで、Bot SDKのコンパイルで生成されたアセットはAssets/Resources/DB/CircuitExport
フォルダ内に置かれます。エクスポートフォルダの変更方法についてはこちらを参照してください。:Changing the export folder
保存した履歴サイズを選択する
Bot SDKファイルに保存した履歴エントリの大きさを変更することができます。本件の詳細はこちらを参照してください。: Changing History Save Count
Back to top