EU4-AI

AI の 3 つの段階

AI の処理プロセスは、知覚、思考、行動の 3 つの段階に分けることができます。

感知

  • AI の現在の状態を記録します。
  • 「基本的なフィルタリング」も知覚の行為です。
  • 基本フィルタリング - 他の感覚が優先される場合、一部の情報は無視されます

考え

AIは、認知段階で収集された情報を使用して、現在の情報と目標を評価し、その後の行動の方向性を指摘します。

アクション

  • 知覚段階の情報と思考段階の意思決定に従って、AI は行動段階で情報に基づいて行動します。
  • アクション フェーズが終了すると、AI は再び認識フェーズに戻ります。
  • ジャンプやランニングなどの目に見える行動と、コミュニケーションなどの目に見えない行動があります。

 ナビメッシュ

作成

ショートカット キー P は、ナビゲーション グリッドを表示するかどうかを切り替えることができます  

NavMesh の紹介

AI の移動範囲、配置モードのボリュームにナビゲーション メッシュ バウンディング ボリュームがあり、彼をシーンに引き込んでワイヤーフレームを形成し、それをスケーリングして AI の移動範囲を形成します

ナビゲーション メッシュは静的と動的に分けられます

  • 静的: ゲームが実行される前に計算された、ナビゲーション グリッドの領域
  • 動的: ゲームの実行中に、ナビゲーション グリッドの面積がリアルタイムで計算されます 

ナビゲーション グリッドの静的および動的設定: レベル エディターの設定 - プロジェクト設定 - ナビゲーション メッシュ - ランタイム - ランタイム生成 (デフォルトの静的)。動的メソッドはリアルタイムで計算されます。これはインテリジェントな調整とより一致しています。 

 

RecastNavMesh を使用して navmesh の一部のプロパティを調整します。 

Nav Mesh が作成されると、Recast Nav Mesh が自動的に作成されます。
RecastNavMesh を選択し、詳細パネルで調整します。

  • ペイント オフセット - ナビゲーション メッシュを上げたり下げたりします。メッシュの実際の位置は変更せず、視覚効果だけを変更します。(遮られた領域を表示するのに役立ちます)
    デフォルトは 10 です。

ここに画像の説明を挿入
ここに画像の説明を挿入ここに画像の説明を挿入

Nav Modifer Volume - ジオメトリは生成されません。

ここに画像の説明を挿入
ここに画像の説明を挿入

NavMesh Barriers - エリアをナビゲートするのが難しいことを示します。AI はこのパスを優先しません。Nav Mesh は削除されません。

ここに画像の説明を挿入
NavArea_Null - NavMesh を削除し、通過できません。

 ここに画像の説明を挿入

NavArea_LowHeight - 高さが不十分な場合に使用されます。通れません。

ここに画像の説明を挿入
NavArea_Default - 渡すことができます。

 ここに画像の説明を挿入

AIController の作成

 キャラクターをコントローラーにバインドする

黒板で変数を取得する

Get Blackboard: 黒板を取得
Set Value as... (... は値の型です): 値を割り当てて黒板の変数値を取得します
Make Literal Name: その値に値を割り当てます (value の変数名) )

効果 

ビヘイビア ツリーの実行
ビヘイビア ツリーの実行: ビヘイビア ツリーの実行 (BTAset: 実行するビヘイビア ツリー)

 ビヘイビア ツリー (Blackboard で使用)

AI の意思決定プロセスを制御および表示する

作成

ビヘイビア ツリーは、黒板と一緒に使用し、黒板にバインドする必要があります。 

ビヘイビア ツリー構造

  • ビヘイビア ツリー: AI の意思決定モデルをシーンで視覚化する方法です。
    • ビヘイビア ツリーの視覚的な構造を観察すると、各ノードの具体的な作業方法を理解する必要なく、ビヘイビア ツリーの実行方法と実行順序を明確に理解できます。
    • 実行順序 - ビヘイビア ツリー内の各ノードの位置によって決定されます。上から下へ、左から右へ。
    • ツリーはタスクで終了します。 

 合成

合成は、AI 実行ブランチのルートです。リーフ ノードのようには実行されませんが、構造を作成し、その子の成功または失敗に基づいて順序を制御します。

  • セレクター: セレクター構成 - その下の子ノードを実行します。
    • 最も適切な task-child を選択しようとすると成功が返され、セレクターは成功します。すべての子ノードが失敗を返し、セレクターが失敗します。(いずれかのタスクが成功した場合は成功。すべてのタスクが失敗した場合は失敗。)
    • 最初の分岐が false を返した場合、分岐が true を返し、Selector ノードが実行されるまで、次の分岐が実行されます。
    • 最も優先度の高いタスクを左側に配置できます。
  • Squeencer Composite - Sequence Composite ノードは子ノードを順番にトラバースし、すべての子ノードが成功を返した場合にのみ成功します。ステップの実行に失敗すると、失敗します。
    • 最初の分岐は true を返し、1 つの分岐が false を返すまで次の分岐を実行します。
  •  シンプルパラレル:パラレル

タスク ノード

タスク: ビヘイビア ツリーの特定の実行ノード。これは、キャラクターの現在のアクションとして理解できます。実行して 1 フレーム後に戻すか、または一定期間持続させることができます。

  • ビヘイビア ツリーのノードです。その下に他のノードを追加することはできません。
  • ビヘイビア ツリー ブランチの最後です (ただし、ビヘイビア ツリーの最後ではありません!)。
  • 「リーフノード」とも呼ばれます

タスクのステータス: 成功失敗、実行。(失敗に関係なく次のノードが実行されます。順序は左から右です。)

 新しいタスクを押した後にタスクをカスタマイズし、タスクのイベントをカスタマイズします

 タスクを完了します (このノードが必要です。そうしないと、現在のタスクでスタックし、実行を続行できなくなります)

変数を設定

デコレータ 

デコレーター: Task の条件判断として理解でき、条件が true の場合にのみ Task が実行されます。 

デコレータを追加 

デコレーターは、条件が満たされた場合に 1 つのタスクを実行し、条件が満たされない場合に別のタスクを実行する if と同等です。 

  • ビヘイビア ツリーの実行ロジックは左から右へ、オブザーバーは停止します。これは次のように理解できます。
    • 自己は自分自身を中断する能力です
    • 優先度が低いと、右側のノードに割り込むことができます
    • どっちも両方
  • 2 番目のノードが実行されると、1 番目のノードのデコレーターが条件を満たし、Lower Priority は 2 番目のノードの実行を中断し、それ自体を実行します。
  • 最初のノードが実行され、アクタの結果が変化した場合、Self は現在のタスクを中断し、最初から再生を開始します。つまり、RunEQSQuery です。
  • どちらの場合も両方を中断できます

仕える 

これはノードへのバインドとして理解できます.このノードの下の状態が実行されると、サービスは常に特定の頻度で実行されます. 

 サービスを作成する

 カスタムサービス(新サービス)

オーバーロードされた関数の実行順序: ノードにぶら下がっているループを持つデコレータ 

現在のサービス ノードに対して実行する場合、実行順序は

----- 最初にイベントを実行して検索を受け取り、AI を開始します。

----- イベント受信有効 AI 再実行

---- イベントは、ループ処理、イベント受信、検索、および AI の開始中に実行されます。

----- エンドノードはイベント受信を行い、AI を無効にします 

混ぜる

タスクとコンポジットは、AI の動作を処理するさまざまな方法を作成できます。
タスクを完了する方法について心配する必要はありません。タスクを完了するための決定を下すだけです。

 属性

 

BlackBoard: 黒板内の変数が変更されたかどうか 
Composite: 複数のブール値を組み合わせます
Cooldown: 実行する前に 5 秒待ちます

Blackboard (ビヘイビア ツリーで使用)

これは、ビヘイビア ツリーのいくつかのパブリック変数の作成とみなすことができ、ビヘイビア ツリーの黒板の変数値を外部から変更して、ビヘイビア ツリーの状態を変更するロジックを実現できます。 

作成

 黒板に変数を作成する

EQS 環境クエリ システム

 EQS (Environment Query System) - AI がさまざまな環境要因を考慮して、ナビゲーション グリッドで使用できるようにします

 作成

 インターフェース

 ポイントを取る: 例としての円: クエリの周りにリングを生成するオブジェクト { クリクル 半径: リングの半径 間隔: 2 つの点ごとの距離点数: ポイントの数


}

レンダリング

 テストする EQS
Distance: 距離テスト
Pathfinding: 2 つの間にパスがあるかどうか

 テスト追加後

 特定の属性
Test Purpose: テスト目的 (Filter Only: フィルタリング、Score Only: 採点)

スコア方程式:スコアリングの仕組み(Liner:距離が近いほどスコアが低く、Inverse Liner:遠いほどスコアが高い、Square:正方形の傾向が変化)

 

 EQS キャラクターを作成 (EQS のテスト用)、作成後にシーンに配置

 テスト ロールでテストする EQS を選択する

 追加するパラメーターは、「Set Named Param」ノードを介してブループリントに設定され、そのターゲットは、「Run EQSQuery」ノードから取得できる EQS インスタンス参照です。

ビヘイビア ツリーで関連付けられた EQ

 

 

光線検出: LineTraceByChannel(チャネルごとに線を検出) {

Start: 開始点 (プレイヤー カメラのワールド座標) (First Person Camera+GetWorldLocation)
End: 終了点: 前方ベクトルを取得するための getforwardvector * 距離 + 現在位置 (GetWorldLocation) = 終了位置
Draw Debug Type: 放出されたものが見えるかどうか光線 (オプションは None、For One Farme one frame、For During duration is reserved、展開された位置で時間を設定)
Actors to Ignore: 無視するオブジェクト
Trace Channel: ノードには Visibility と Camare の 2 種類があります衝突した物体が検出されると、検出対象オブジェクト詳細パネルの衝突部分に対応するチャネルが開かれるため、検出対象の対応するオブジェクトの関連チャネルを設定する必要があります。ブロックし、光線検出チャネルと一致し、光線の検出と認識を実行できます。

}


 Make Arry: 配列を作成します

 デコレータ変数を設定する

 

 

EQS を使用してポイントをランダムに見つける

おすすめ

転載: blog.csdn.net/qq_52825422/article/details/126461477