ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
この記事の要点
- AI MoveTo ノードで AIController が Pawn を目的地まで自動移動させる
- 前提: NavMesh Bounds Volume 配置 + RecastNavMesh 自動生成 + Pawn に AIController
- 引数: Target Actor(追従)または Target Location(座標)、Acceptance Radius
- 実行結果は Success / Failed / Aborted。On Success / On Fail 出力ピン
- Behavior Tree なら Move To タスクを使うのが定番(Blackboard のキーから自動取得)
1AI MoveTo ノードとは
AI MoveTo は、AIController がコントロールする Pawn を NavMesh 上で目的地まで自動的に動かす Blueprint ノードです。手動で SetActorLocation を呼ぶよりずっと賢く、経路探索(Pathfinding)と障害物回避を内蔵しています。
RTS の選択ユニット移動、敵 AI のパトロール、NPC の目的地移動、リターゲットなど、ゲーム AI の根幹となるノードです。
2動作するための前提条件
- NavMesh Bounds Volume をシーンに配置(このボリュームの範囲内で経路探索可能になる)
- NavMesh がRecastNavMesh アセットとして自動生成される(青く塗られた地面が表示される)
- 動かしたい Pawn に AIController がアタッチされている(Pawn の
AIControllerClassプロパティ) - Auto Possess AI が「Placed in World or Spawned」
- Pawn に CharacterMovementComponent 等の移動コンポーネントがある
3NavMesh の確認
[Show NavMesh の表示]
ビューポート上で P キー押下 → NavMesh の青色表示が切り替わる
表示されていない場合:
- NavMesh Bounds Volume が無い
- Volume の範囲が地面を含んでいない
- 地面が Static でない
- Project Settings > Navigation Mesh の設定不足
[RecastNavMesh プロパティ]
- Cell Size: 経路解像度(小さくすると詳細だが重い)
- Agent Radius: 通れる隙間の幅
- Agent Height: 通れる高さ
- Tile Size: 動的更新の単位
4基本: 場所への移動
[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);
}
5Actor を追従する
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
6Movement Result の意味
| Result | 意味 | 対処 |
|---|---|---|
| Success | 目的地到達 | 次の行動へ |
| Failure | 経路が見つからない / Pawn が居ない | NavMesh の範囲 / 障害物確認 |
| Aborted | StopMovement / 別 MoveTo で中断 | 意図的なので無視可 |
| Skipped | 同じ目的地で既に呼び中 | 無視 |
| Invalid | パラメータ不正 | 引数を見直し |
7Acceptance Radius と Stop on Overlap
- Acceptance Radius = 目的地からこの距離以内に入ったら到着扱い。0 にすると正確だが微振動の原因に → 50〜100 が無難
- Stop on Overlap = ターゲット Actor の Collider に重なった瞬間に停止(追従用、Pawn の Capsule 半径を考慮)
8Behavior 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 タスクを実行
9NavMesh の動的更新
シーン中に動的に障害物を置く(壊せる壁、生成されるオブジェクト等)場合、NavMesh を動的に更新する必要があります:
- RecastNavMesh アセットの Runtime Generation = Dynamic に設定
- 動的障害物には NavModifier Component またはNavModifierVolume
- Project Settings > Navigation Mesh > Tile Numlines Cache 等で性能調整
10NavQueryFilter で経路選択をカスタム
特定のエリアを避ける、コストを変える等を実現するには 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 を避けるルートを選ぶ
11よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| 動かない | 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 間隔で十分 |
12FAQ
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 を手動実行に変えるのも手。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- Event BeginPlay
- Event ActorBeginOverlap
- Event Tick
- on component begin overlap
- On Component Hit
- CameraBoom(Spring Arm)
- Get Player Character
- Nav Mesh Bounds Volume
- AI MoveTo
- Pawn
- Create Render Target 2D
- Take High Res Screenshotノード
- Sphere Reflection Capture
- Event Tickノード
- ウィジェットのキャンバスパネル
- DefaultSceneRoot
- FloatingPawnMovement
- Set World Rotation
- Event Any Damage
- Set World Rotation
- VInterp To
- Get Socket Transform
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?