ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
AI MoveTo ノードとは
AI MoveTo は、AIController がコントロールする Pawn を NavMesh 上で目的地まで自動的に動かす Blueprint ノードです。手動で SetActorLocation を呼ぶよりずっと賢く、経路探索(Pathfinding)と障害物回避を内蔵しています。
RTS の選択ユニット移動、敵 AI のパトロール、NPC の目的地移動、リターゲットなど、ゲーム AI の根幹となるノードです。
動作するための前提条件
- NavMesh Bounds Volume をシーンに配置(このボリュームの範囲内で経路探索可能になる)
- NavMesh がRecastNavMesh アセットとして自動生成される(青く塗られた地面が表示される)
- 動かしたい Pawn に AIController がアタッチされている(Pawn の
AIControllerClassプロパティ) - Auto Possess AI が「Placed in World or Spawned」
- 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 の範囲 / 障害物確認 |
| Aborted | StopMovement / 別 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 を手動実行に変えるのも手。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?