This document is about: QUANTUM 1
SWITCH TO

Goal Oriented Action Planning

新しいGOAPの作成

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

Create Document Button

新しいタスクの作成

空のスペースを右クリックすると、新しいタスクを作成できます。

タスクには*ConditionとEffect(条件と効果)*のセットがあります。
これらは、ゲームのワールドの状態に直接関連しています。
quantum_codeソリューションで独自のワールドステートフラグのセットを定義できます。

  • 条件は、それらの条件が現在のワールドの状態に一致する場合にタスクを実行することを指定します。
  • 効果は、タスクの終了後にワールドの状態で何が変わるかを指定します。

条件/効果を定義せずに作成できるより単純なタスクはこちらです:

New Task

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

Editing a Task

条件/効果の指定

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

Conditions and Effects

新しいワールドステートフラグをタスクに追加すると、True として扱われます。
そのため、Conditionsは、ワールドステートでそのフラグがTrueに設定されているかどうかを確認します。
効果は、ワールドステートでフラグをtrueに設定します。

これらの値を切り替えるには、フラグの横にある小さな緑の円を左クリックして、赤に切り替えます。

Negative Condition

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

Task Sample

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

Multiple Tasks

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

Disable Task

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

GOAP Hierarchy

GOAP アクション

アクションの定義はBot SDKでの共通トピックです。visual editorでのアクションの使用方法についての詳細はこちらを参照してください。:Defining Actions

ミュート

自分のAIをテストする場合、ノードをミュートしていくつかのロジックを一時的に無効化することが便利な場合があります。ノードのミュートについての詳細はこちらを参照してください。: Muting

GOAPのコンパイル

作成したGOAPを実際に使用するには、実行した内容をコンパイルする必要があります。

コンパイルするには、2つのオプションがあります。

Compile Buttons
  • 左ボタンを使用すると現在開いているドキュメントのみをコンパイルします。
  • 右ボタンをしようすると,プロジェクトにあるすべてのAIドキュメントをコンパイルします。

GOAPファイルは、"Assets/Resources/DB/CircuitExport/GOAP_Assets"にあります。

HFSM Asset

自分のボットが使用するAIを選ぶ

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

Referencing 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