概要
密集回避 は、MassEntity と統合されているフォースベースの回避システムです。このシステムは、MassEntity システムを使用しているエンティティに対する高性能な回避を提供します。
このシステムは、UMassMovingAvoidanceProcessor を使用して、さまざまな入力を処理し、FMassForceFragment** へのステアリング フォースを出力します。この出力フォースを使用して、環境内にある他のエンティティから離してエンティティを操縦します。
システムの入力
入力 | 説明 |
---|---|
FMassForceFragment | エンティティを他のエンティティから遠ざけるためにエンティティに適用されるフォースを表します |
FMassNavigationEdgesFragment | エンティティによって回避に使用されるエッジ (壁) のリストを指定します。 |
FMassMoveTargetFragment | エンティティの目的地を表します。前方方向や現在位置 (立ち止まっている、動いている、など) などの追加情報も入っています。 |
FDataFragment_Transform | エンティティのトランスフォームを表します。 |
FMassVelocityFragment | エンティティのトランスフォームを表します。 |
FDataFragment_AgentRadius | エンティティの半径を表します。 |
システムの出力
出力 | 説明 |
---|---|
FMassForceFragment | エンティティに適用される最終的なステアリング フォース。 |
システムの実行
UMassMovingAvoidanceProcessor
UMassMovingAvoidanceProcessor は、各エンティティに対する分離フォースと回避フォースの合計を計算します。それらのフォースは、隣接するエンティティおよび障害物によって生じます。
他のエンティティはコライダーとして表され (FMassAvoidanceColliderFragment を参照)、カプセル形状または丸薬の形状を持つことができ、それぞれ人間と車両に使用されます。いくつかの設定を調整して、これらのフォースの効果のバランスを取ることができます。
隣接するエンティティは FNavigationObstacleHashGrid2D (UMassNavigationSubsystem が所有) を使用して収集され、最も近いエンティティだけが考慮されます。障害物はエッジとして表され、FMassNavigationEdgesFragment から生じます。 回避フォースは予測的であるため、その方向は将来の衝撃位置から計算されます。分離フォースは、環境から緩い距離を維持することを目的とする垂直フォースです。
UMassStandingAvoidanceProcessor
UMassStandingAvoidanceProcessor は、エンティティが静止している場合に使用される類似プロセッサです。
UMassNavigationObstacleGridProcessor
The UMassNavigationObstacleGridProcessor は、障害物のグリッド位置を FNavigationObstacleHashGrid2D に更新するために使用されます。
UMassZoneGraphLaneCacheBoundaryProcessor
UMassZoneGraphLaneCacheBoundaryProcessor は、ZoneGraph と併用され、現在キャッシュされている先行のレーン セグメントからエッジを構築します (FMassZoneGraphCachedLaneFragment および FMassZoneGraphPathFollowTask を参照)。
それらのエッジは FMassNavigationEdgesFragment に追加されています。
システムの設定
密集回避の設定は FMassMovingAvoidanceParameters と FMassStandingAvoidanceParameters に格納されています。利用可能なすべての設定の詳しい説明については、プロジェクト ファイルにある「MassAvoidanceFragments.h」を参照してください。
密集回避をデバッグする
密集回避システムをデバッグするには、ビジュアル ロガー および ゲームプレイ デバッガ を使用します。
ビジュアル ロガー
ビジュアル ロガー を使用すると、エディタで以下のカテゴリを表示できます。
Category | 説明 |
---|---|
LogAvoidance | 基本情報 (初期および最終的なステアリング フォースや現在のエンティティなど) が表示されます。 |
LogAvoidanceVelocity | エンティティの現在の速度および望ましい速度が表示されます。 |
LogAvoidanceAgents | 障害物のエッジ、予測コリジョン、エンティティと関連付けられているフォースが表示されます。 |
ビジュアル ロガーを有効にする
-
[Tools (ツール)] > [Debug (デバッグ)] > [Visual Logger (ビジュアル ロガー)] の順にクリックすると、[Visual Logger] ウィンドウが開きます。
-
リストから MassSimulationSubsystem トラックを選択します。
-
[Edit (編集)] > [Editor Preferences (エディタの環境設定)] の順に選択すると、[Editor Preferences] ウィンドウが開きます。[Visual Logger] カテゴリをクリックし、[Stick to Recent Data (最新のデータに固定)] チェックボックスをオンにすると、リアルタイム データが表示されます。
-
~ キーを押すと コマンドライン が開くので、「ai.debug.mass.DebugEntity」 または 「ai.debug.mass.SetDebugEntityRange」 と入力して、デバッグ中に表示されるエンティティを設定します。
-
[Play Settings menu (プレイ設定メニュー)] をクリックすると、デバッグ ビジュアライゼーションがエディタに表示されます。
ビジュアル ロガーの使用の詳細については、「ビジュアル ロガー」ドキュメントを参照してください。
ゲームプレイ デバッガ
ゲームプレイ デバッガ を使用して、エンティティに対する MoveTarget、ステアリング、コライダーなどの情報をエディタに表示できます。
ゲームプレイ デバッガを有効にする
ゲームプレイ中に ` キーを押すと、ゲームプレイ デバッガが有効になります。Shift+O キーを押すと エンティティの概要 が表示され、Shift+V キーを押すと 回避 が表示されます。

密集回避でゲームプレイ デバッガを使用する方法の詳細については、「GameplayDebuggerCategory_Mass.cpp」ソース ファイルを開いてください。