UDN
Search public documentation:

WaypointsTechnicalGuideJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

ウェイポイント技術ガイド

ドキュメント概要: パス ノード ベースのネットワークを使用するための AI の接続に関する簡単なガイド。

ドキュメントの変更ログ: Steve Polge により作成、Matt Tonks によりアップデート。

概観

これは、一連のパス ノードを使用するために AI の接続に関する簡単でかつポイントを押さえたガイドです。

ウェイポイントとパス ノード

ナビゲーションは、生成前のパス ネットワークに基づきます。このパス ネットワークは、ボットが行き来するエリアの 100% をカバーしないので、エリアはローカライズされたアセスメントや環境のナビゲーションをも実行しなければいけません。そこでこれらの目的のために、衝突トレースを使用してサンプルをしたり、衝突データ ストラクチャ内の近くのオブジェクトの検査をします。

キー ポイントとその他のナビゲーション ポイント

JumpDests/JumpSpots

JumpDests/JumpSpots は削除されました。reachspec は、2 つのポイントの間に到着するのにジャンプが必要であっても生成されます。AI は、reachspec でフラグの設定を介して、これらのポイントの間にジャンプする必要があるという命令を受けます (フラグに到着を参照してください)。Engine からは削除されたようですが、 Gears of War には似たようなものがあります。これを、AI が通常ジャンプできないようなポイントに使用しますが、強制的に進めていきます。(例えば、特別な状況で AI に強制的に使用させたいような非常に長い降車地点です。)

Anchors

アンカーは、もう 1 つの NavPoint が付いている NavigationPoint です。これは、パス ネットワーク内へのボットのアンカー ポイントです。より具体的に言うと、アンカーはボットが (パスファインドをせずに) 直接達することのできるナビゲーション ポイントです。これが、このボットのパス サーチが始まる場所でもあります。いかなるパス グラフ上のパスファインドの最初のステップは、もっとも適した開始ポイントとエンド ポイントをグラフ上で探し、その間にパスを生成することです。アンカーはボットのパス サーチの開始ポイントを表し、findpathtoward の呼び出し後、アンカーからゴールへのルートができます。

レイキャストが行われるのは、ポイントまたはオブジェクトに直接達することができるかどうかを決定する時 (ランタイム中) のみです。そうは言っても、エディタ内でどのようにパス ネットワークが生成されるかに言及しているのならば、到達可能性を決定するために、確かにナビゲーション ポイント間でレイキャストが行われています (ビルド パス ボタンを押すとこれが起こります)。

コントローラ

関数

ReachedDestination

この関数は、現在 AI が向かっているオブジェクトが 'reached' として考慮されるべきかどうかを確定するために、移動中に AI にクエリーされます。言い換えると、AI はこれを呼び出し、現在の目的地への移動を停止してルート中にある次のオブジェクトに向かって移動を始めるか、または全体的なゴールに達したので完全に移動を停止するかを決定します。この関数は、AI が移動しようとしているアクタの 'reachedby' を呼び出すことに留意してください。これは、AI がいつカスタム オブジェクトへの移動の試みをやめるかに関して、カスタム オブジェクトに決める機会を与えます。これがどのように便利であるかの良い例は、大きなオブジェクトです。通常、AI はオブジェクトの半径内に入るまで、オブジェクトの場所に走って行こうとします。しかし、これがチェックする半径以上に大きい衝突がある場合、当然のことながら問題となります。このようなオブジェクトの場合、そのカスタム寸法を考慮するために、単に reachedby をオーバーライドすることができます。

ActorReachable

AI は、オブジェクトが 直接 到達可能であるかどうかを決定するために、この関数を呼び出します。つまり、AI はオブジェクトに向かって、(ジャンプして越えることのできない) 何にもぶつからずにまっすぐ走っていけるか、ということです。これは、いくつかのことを決定するために移動中に使用されますが、良い例は、目的地にまっすぐ走っていくべきか、パス ネットワークを介してパスするかを決定するのにこの関数を使用する場合です。

FindPathToward

この関数はパス ネットワークの行き来を実行して、ボットの位置からパスされたゴールにルートを生成し、そのルート (ボット位置からボット ゴールのウェイポイントの順序付けられたリスト) をコントローラの routecache に設置します。これは、ゴールに達するにはどのウェイポイントに移動すればよいかを、ボットに教えます。

FindPathToward は、最初にボットのアンカーが有効であることを確かめて (そして有効でない場合は新しいものを探して)、その後アンカーからゴールへのルートを生成するためにパス ネットワークを横断することにより、アクタに向かってどのように進むかを決定します。いったんこのルートが生成されると、ボットは ReachedDestination がウェイポイントに到達したと決定するまで、ルートの最初のポイントに向かって直接走ります。これはその後、生成されたルートでボットが次のウェイポイントに走って行くことをトリガします。

FindPathToward はボットの使用するルートを生成するので、ボットがクリップしたり、角を曲がって結果的にスタックしたり、という場合は、何かがおかしいのです。 show paths を使用して、ライン (reachspecs) が角を通っているかどうかチェックしてみるのが良いでしょう。

MoveTo

これは、ボットをパスされたポイントに直接移動させ、到着すると終了させる潜在関数です。この関数はパスファインドをせず、ポーンをターゲットにまっすぐ向かわせるだけです。

MoveToward

これは、MoveTo に非常に似ていますが、アクタを目的地として取り、この余分なデータを利用する特別な処理を持っています (ボットがナビゲーション ポイントに向かって移動しているとアンカーを設定するなど)。

ActorReachable

例はソース コードを見るのが良いでしょう。UnPawn.cpp 内の APawn::actorReachable で始まります。高いレベルで、この関数が何をするかは以下の通りです。

  1. チェックしているアクタが私たちの立っている場所の reachspec 上にあるかどうか、または目的地のアクタが私たちのいるナビゲーション ポイントの範囲内にいるかどうかを決定することによりアーリーアウトしようとします (オフラインで検証されているので、reachspecs/ナビゲーション ポイントは、歩くのに常に有効であると仮定します)。
  2. 素早くレイキャストを行い、目的地が見えるかどうかをチェックし、見えない場合はアーリーアウトします。
  3. 目的地のアクタがソリッド グラウンドにいるかどうかをチェックします。
  4. (物理モードにより) 目的地への移動をシミュレートする APawn::Reachable を呼び出し、そのポイントに到達することができるかどうかを決定します。例えば、ボットが PHYS_Walking にいると、walkreachable を呼び出し、目的地への徒歩での移動をシミュレートし、徒歩/ジャンプで到達可能かどうかを決定します (UnPawn.cpp の APawn::walkReachable を参照)。