7.

UE5でAI Move ToがBlockedで失敗する原因と対処方法|NavMesh確認

編集

Unreal Engine 5(UE5)で「AI Move To」ノードや「Move To」タスクを実行したとき、移動結果(Movement Result)が「Blocked」となって失敗するのは、AIが経路(パス)の追従中に何らかの障害で前進できなくなり、目的地へ到達する経路が塞がれていると判定された状態です。経路自体は生成されたものの、その経路上を進めずに移動が打ち切られたことを示します。本記事では、Blockedが返される意味と主な原因、そして確認すべき設定と対処の手順を解説します。

この記事の要点
  • 「Blocked」は、AIが経路の追従中に前進できなくなり、目的地への経路が塞がれていると判定された結果を指す。
  • 主な原因は、NavMesh(ナビメッシュ)が目的地まで繋がっていない、経路上に障害物や動的オブジェクトがある、エージェント半径に対して通路が狭い、目的地がNavMesh外にある、などが考えられる。
  • まずは NavMesh Bounds Volume の範囲とビルド状態を確認し、`P` キーや `show Navigation` でNavMeshを可視化して経路を目視確認するのが基本となる。
  • Acceptance Radius(到達判定半径)が小さすぎると、ゴール付近まで来ても到達と見なされず Blocked になる場合がある。
  • 「Blocked」「Aborted」「Failed/Invalid」は意味が異なるため、返ってきた結果に応じて切り分けると原因を特定しやすい。

「Blocked」が返される意味

UE5のAIの移動結果は、内部的に EPathFollowingResult という列挙型で表現されます。このうち「Blocked」は、経路の追従(Path Following)中にエージェントが前進できず、ゴールへ向かう経路が塞がれていると判定されたときに返される値です。一般に、目的地への経路は計算できているものの、その経路上で一定時間・一定距離以上の前進が検知できなかった場合に、移動が打ち切られて「Blocked」となります。

ポイントは、Blockedは「経路が見つからなかった」エラーとは別物だという点です。経路探索そのものが失敗した場合は「Failed」や「Invalid」といった別の結果になります。Blockedは「経路はあるが進めない・進んでも到達と見なされない」状況を表すと理解すると、原因の切り分けがしやすくなります。

// Blueprintでは「AI Move To」ノードの「On Fail」(失敗)実行ピンが発火する。

// Behavior Tree の Move To タスクでは、タスクが Failed として終了する。

// C++ では EPathFollowingRequestResult / FAIRequestID を通じて結果を受け取り、

// EPathFollowingResult::Blocked として通知される。

主な原因

1. NavMeshが目的地まで繋がっていない

もっとも多い原因が、NavMesh(歩行可能領域)が目的地まで連続して敷かれていないケースです。NavMesh Bounds Volume の範囲外や、段差・隙間でNavMeshが途切れている場所へ移動しようとすると、経路を最後まで辿れず Blocked になることがあります。スタート地点とゴール地点が別々のNavMeshの島(連結していない領域)に属している場合も同様です。

2. 経路上に障害物・動的オブジェクトがある

NavMeshのビルド後に配置・移動した動的なオブジェクト(移動する床、開閉するドア、他のキャラクターなど)が経路を塞いでいると、AIがそこで前進できず Blocked と判定されます。とくに、静的なNavMeshしか生成していない場合、ランタイムで動いた障害物はNavMeshに反映されないため、見た目上は塞がれているのにAIが古い経路を進もうとして詰まることがあります。

3. エージェント半径に対して通路が狭い

NavMeshはエージェント(AIキャラクター)の半径(Agent Radius)を考慮して生成されますが、キャラクター自身のカプセルコリジョンが大きい、あるいは通路・ドアの幅がエージェント半径に対して狭いと、経路は引けても実際には通り抜けられず前進が止まることがあります。エージェント半径とキャラクターのカプセル半径が大きく食い違っている場合に起こりやすい現象です。

4. Acceptance Radius(到達判定半径)が小さすぎる

「AI Move To」には Acceptance Radius(到達と見なす距離)の設定があります。これが小さすぎると、AIがゴールのすぐ近くまで来ても「まだ到達していない」と判断され続け、最終的に前進不能と見なされて Blocked になる場合があります。とくに目的地が他のコリジョンの内部や壁際にあり、キャラクターが物理的にそれ以上近づけないケースで顕著です。

5. 目的地がNavMesh外にある

移動先の座標がNavMeshの上に乗っていない(空中、NavMesh外の地形、コリジョンの内側など)場合、その地点へは正規の経路を引けません。設定によっては最寄りのNavMesh上の点へ補正されますが、補正が効かない・補正先まで進めないと、結果として Blocked や Failed になります。

確認すべき設定と対処の手順

手順1: NavMeshを可視化して状態を確認する

まずはNavMeshが意図した範囲に正しく生成されているかを目視で確認します。エディタのビューポートで `P` キーを押すとNavMeshが緑色で表示されます(ゲーム中の確認にはコンソールコマンド `show Navigation` が利用できます)。目的地まで緑の領域が連続して繋がっているか、途中で途切れていないかをチェックしてください。緑が表示されない場合は、そもそもNavMeshが生成されていません。

手順2: NavMesh Bounds Volume の範囲と再ビルドを確認する

NavMeshは NavMesh Bounds Volume で囲まれた範囲にのみ生成されます。AIが移動するエリア全体がこのボリュームの内側に入っているかを確認し、足りなければボリュームを拡張します。レベルやジオメトリを変更した後にNavMeshが古いままだと経路がずれるため、ボリュームを少し動かす・スケールし直すなどして再ビルドを促すか、後述の自動更新を有効にして最新の状態に保ちます。

手順3: 動的障害物への対応を設定する

ランタイムで動く障害物に追従させたい場合は、Project Settings の Navigation Mesh で Runtime Generation(ランタイム生成)を「Dynamic」系に設定し、NavMeshをランタイムで更新できるようにします。動かしたくないオブジェクト・避けたいエリアには Nav Modifier Volume や Nav Modifier コンポーネントを付与してNavMeshに反映させます。キャラクター同士の回避には RVO Avoidance の利用も検討します。ただし回避設定が過剰だと、互いに譲り合って前進できず Blocked を誘発することもあるため、パラメータは控えめに調整します。

手順4: Acceptance Radius と目的地を見直す

到達できずに失敗する場合は、「AI Move To」の Acceptance Radius をキャラクターの大きさに合わせて少し広げてみます。また、移動先の座標がNavMesh上に乗っているかを確認し、必要に応じて Project Goal Location / 最寄りのNavMesh点へ補正する処理(Projected Navigation)を挟むと、目的地がわずかにNavMesh外でも到達しやすくなります。

手順5: コリジョンとエージェント設定の整合を取る

キャラクターのカプセルコリジョン半径と、Project Settings の Navigation System / Supported Agents で指定する Agent Radius・Agent Height が大きく食い違っていないかを確認します。通路やドアの幅が狭すぎる場合は、レベル側で幅を広げるか、エージェント半径を実態に合わせて見直します。設定変更後はNavMeshの再ビルドが必要です。

「Blocked」「Aborted」「Failed/Invalid」の違い

「AI Move To」が失敗する際の結果は1つではありません。返ってきた結果によって原因の方向性が異なるため、まずどの結果なのかを切り分けると効率的です。Aborted で失敗するケースについては、別記事「「AI Move To」が「Aborted」で失敗」もあわせて参照してください。

結果大まかな意味主に疑う原因
Blocked経路はあるが追従中に前進できず、経路が塞がれていると判定された。動的障害物・通路の狭さ・到達判定半径・NavMeshの途切れ。
Aborted移動が途中でキャンセル・中断された。新しい移動命令での上書き、ロジックによる停止、ターゲット消失など。
Failed / Invalidそもそも有効な経路を生成・開始できなかった。NavMesh未生成、目的地がNavMesh外、AIControllerやPawnの設定不備。
Success目的地(または到達判定範囲内)へ到達した。

※結果名や列挙値の詳細はUEのバージョンによって表記や挙動が異なる場合があります。正確な分類は、お使いのバージョンの公式ドキュメントや EPathFollowingResult の定義で確認することをおすすめします。

よくある落とし穴

落とし穴対処の方向性
NavMesh自体が生成されていない(`P` キーで緑が出ない)。NavMesh Bounds Volume を配置し、AIの移動範囲を覆ってからビルドする。
レベルやオブジェクトを変更したのにNavMeshが古いまま。再ビルド、またはRuntime Generationを動的設定にして自動更新する。
到達不能な地点(NavMesh外・コリジョン内部・空中)を目的地にしている。目的地を最寄りのNavMesh上に補正してから移動させる。
Acceptance Radius が小さく、ゴール直前で前進不能になる。半径をキャラクターの大きさに合わせて少し広げる。
回避設定(RVO等)が強すぎてAI同士が詰まる。回避の強度・対象を見直し、密集場面でのパラメータを調整する。

よくある質問(FAQ)

Q1. NavMeshは緑で表示され目的地まで繋がっているのに、Blockedになります。

A. 経路は引けているのに進めない場合、エージェント半径とキャラクターのカプセルコリジョンの不整合、通路やドアの幅の狭さ、Acceptance Radius の小ささ、あるいはランタイムで配置・移動した障害物がNavMeshに反映されていないケースが疑われます。キャラクターを実際に動かしてどこで止まるかを観察し、止まる地点の周辺の幅・コリジョン・動的オブジェクトを確認してください。

Q2. 動く障害物に対応させたいのですが、どう設定すればよいですか。

A. Project Settings の Navigation Mesh で Runtime Generation を動的に更新できる設定にし、避けたいオブジェクトやエリアに Nav Modifier を付与してNavMeshへ反映させます。キャラクター同士の局所的な回避には RVO Avoidance を併用できますが、過剰な回避は逆に前進を妨げる場合があるため、密集時の挙動を確認しながら調整してください。

Q3. Blocked と Failed の見分け方を教えてください。

A. おおまかには、Failed/Invalid は「経路をそもそも生成・開始できなかった」(NavMesh未生成、目的地がNavMesh外、Pawn/AIControllerの設定不備など)、Blocked は「経路は始まったが追従中に前進できなくなった」状態です。前者はまずNavMeshと目的地座標、後者は経路上の障害物・通路幅・到達判定半径を重点的に確認すると切り分けやすくなります。なお列挙値の詳細な定義はバージョンによって異なる場合があるため、最終的には公式の情報で確認してください。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. SetInputMode_UIOnlyは、'PlayerController'ターゲットとして有効なプレイヤーコントローラーを想定しています
  2. 無限ループが検出されました
  3. ~は表示されるブループリント(BlueprintReadOnlyまたはBlueprintReadWrite)ではありません。これは将来のリリースでエラーとなるため、マークアップを修正するかアクセスを停止してください。
  4. 古いHLODアクタを検出、HLODをリビルドする必要があります
  5. ブループリントランタイム エラー: "プロパティ ~ の読み取りを試行するためのアクセスはありません"
  6. 「AI Move To」が「Aborted」で失敗
  7. 「AI Move To」が「Blocked」で失敗

最近更新/作成されたページ