この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: AI MoveTo
SEOタイトル: Unreal Engine AI MoveTo 完全ガイド(NavMesh / AIController / Behavior Tree)

この記事の要点
  • AI MoveTo ノードで AIController が Pawn を目的地まで自動移動させる
  • 前提: NavMesh Bounds Volume 配置 + RecastNavMesh 自動生成 + Pawn に AIController
  • 引数: Target Actor(追従)または Target Location(座標)、Acceptance Radius
  • 実行結果は Success / Failed / AbortedOn Success / On Fail 出力ピン
  • Behavior Tree なら Move To タスクを使うのが定番(Blackboard のキーから自動取得)

AI MoveTo ノードとは

AI MoveTo は、AIController がコントロールする Pawn を NavMesh 上で目的地まで自動的に動かす Blueprint ノードです。手動で SetActorLocation を呼ぶよりずっと賢く、経路探索(Pathfinding)障害物回避を内蔵しています。

RTS の選択ユニット移動、敵 AI のパトロール、NPC の目的地移動、リターゲットなど、ゲーム AI の根幹となるノードです。

動作するための前提条件

  1. NavMesh Bounds Volume をシーンに配置(このボリュームの範囲内で経路探索可能になる)
  2. NavMesh がRecastNavMesh アセットとして自動生成される(青く塗られた地面が表示される)
  3. 動かしたい Pawn に AIController がアタッチされている(Pawn の AIControllerClass プロパティ)
  4. Auto Possess AI が「Placed in World or Spawned」
  5. Pawn に CharacterMovementComponent 等の移動コンポーネントがある

NavMesh の確認

[Show NavMesh の表示]
ビューポート上で P キー押下 → NavMesh の青色表示が切り替わる
表示されていない場合:
  - NavMesh Bounds Volume が無い
  - Volume の範囲が地面を含んでいない
  - 地面が Static でない
  - Project Settings > Navigation Mesh の設定不足

[RecastNavMesh プロパティ]
  - Cell Size: 経路解像度(小さくすると詳細だが重い)
  - Agent Radius: 通れる隙間の幅
  - Agent Height: 通れる高さ
  - Tile Size: 動的更新の単位

基本: 場所への移動

[Blueprint Node]
AI MoveTo
  Pawn               = Self (Controlled Pawn)
  Destination        = Target Location (Vector)
  Acceptance Radius  = 50.0
  Stop on Overlap    = true
  Use Pathfinding    = true
  Can Strafe         = false
  Filter Class       = (None or NavQueryFilter)

[出力ピン]
  On Success → 目的地到着時
  On Fail    → 経路不能 / 中断時
  Movement Result (enum: EPathFollowingResult)

C++ での呼び方

#include "Blueprint/AIBlueprintHelperLibrary.h"

void AMyAIController::MoveToTarget()
{
    APawn* MyPawn = GetPawn();
    if (!MyPawn) return;

    // 場所指定
    FVector Dest(1000.f, 500.f, 0.f);
    UAIBlueprintHelperLibrary::SimpleMoveToLocation(
        this, Dest);

    // Actor 追従
    AActor* Target = TargetActor;
    UAIBlueprintHelperLibrary::SimpleMoveToActor(
        this, Target);

    // 詳細制御 (低レベル API)
    FAIMoveRequest MoveReq;
    MoveReq.SetGoalLocation(Dest);
    MoveReq.SetAcceptanceRadius(50.f);
    MoveReq.SetUsePathfinding(true);
    MoveTo(MoveReq);
}

Actor を追従する

Pawn (プレイヤーなど)が動き続ける Actor の場合、MoveTo に Target Actor を渡せば自動的に追跡します:

[Tick Event] (毎フレームは重いので 1 秒間隔等にする)
  Get Player Pawn → Target Actor

AI MoveTo
  Pawn               = Self
  Target Actor       = (Player Pawn)
  Acceptance Radius  = 200.0  ← 攻撃範囲
  → On Success: Attack Player

Movement Result の意味

Result意味対処
Success目的地到達次の行動へ
Failure経路が見つからない / Pawn が居ないNavMesh の範囲 / 障害物確認
AbortedStopMovement / 別 MoveTo で中断意図的なので無視可
Skipped同じ目的地で既に呼び中無視
Invalidパラメータ不正引数を見直し

Acceptance Radius と Stop on Overlap

  • Acceptance Radius = 目的地からこの距離以内に入ったら到着扱い。0 にすると正確だが微振動の原因に → 50〜100 が無難
  • Stop on Overlap = ターゲット Actor の Collider に重なった瞬間に停止(追従用、Pawn の Capsule 半径を考慮)

Behavior Tree から使う(推奨)

本格的な AI 開発では Behavior Tree (BT) の中で Move To タスクを使うのが定番です。Blackboard キーと連携させることで動的な目的地に追従できます:

[Behavior Tree 構造例]
Selector (戦闘ロジック)
├ Sequence "追跡"
│  ├ Wait (0.3s)
│  └ Move To (Blackboard Key = "TargetActor")
└ Sequence "巡回"
   ├ Find Random Location In NavMesh → Set as "PatrolLocation"
   ├ Move To (Blackboard Key = "PatrolLocation")
   └ Wait (Random 2-5s)

[Blackboard]
TargetActor    (Actor)
PatrolLocation (Vector)

[AIController]
RunBehaviorTree(MyBT) → BT が自動的に Move To タスクを実行

NavMesh の動的更新

シーン中に動的に障害物を置く(壊せる壁、生成されるオブジェクト等)場合、NavMesh を動的に更新する必要があります:

  • RecastNavMesh アセットの Runtime Generation = Dynamic に設定
  • 動的障害物には NavModifier Component またはNavModifierVolume
  • Project Settings > Navigation Mesh > Tile Numlines Cache 等で性能調整

NavQueryFilter で経路選択をカスタム

特定のエリアを避ける、コストを変える等を実現するには NavArea + NavQueryFilter を設計します:

[Custom NavArea]
NavArea_Water   (NavAreaCost = 10.0, 水中は遅い)
NavArea_Lava    (NavAreaCost = 100.0, ほぼ避ける)
NavArea_Default (NavAreaCost = 1.0)

[NavQueryFilter]
NavQueryFilter_Cautious:
  NavArea_Lava 通行不可
  NavArea_Water コスト 50x

AI MoveTo の Filter Class = NavQueryFilter_Cautious
→ Lava を避けるルートを選ぶ

よくあるトラブル

症状原因対処
動かないNavMesh が無い / 範囲外P キーで NavMesh 確認
動かないAIController がアタッチされていないPawn の AIControllerClass 設定
動かないAuto Possess AI が "Disabled""Placed in World or Spawned" に
挙動が震えるAcceptance Radius が小さい50-100 に増やす
段差が登れないRecastNavMesh の Step Height 不足Cell Height / Step Height 調整
NavMesh が地形に張り付かない地面が Static でない / NavMesh Bounds の高さ不足地形を Static、Volume 拡大
追従が遅い / カクつくTick で毎フレーム MoveTo してる0.5 〜 1s 間隔で十分

FAQ

Q: 飛行する敵に AI MoveTo を使いたい
A: NavMesh は 2D(床ベース)なので飛行には不向き。FloatingPawnMovement + 自前経路探索、または SVO Navigation プラグイン、またはNavLinkProxy でジャンプ・滑空指示。

Q: 経路の途中で停止させたい
A: AIController の StopMovement() を呼ぶ。または別の MoveTo を呼べば前の MoveTo は自動的に Abort されます。

Q: NavMesh 生成が遅い
A: Recast の Cell Size を大きく(例 19→30)、Tile Size を見直す。エディタ起動時は重くなりがちなので Build Navigation を手動実行に変えるのも手。