敵NPCがドアの角に引っかかったり、壁に向かって歩き続けたりすると、プレイヤーの没入感は一瞬で損なわれます。自然に動くNPCを構築するには、Robloxの3Dナビメッシュエンジンを理解することが不可欠です。
組み込みの`PathfindingService`は、動的な物理環境に対応した高精度なA*経路探索を提供します。エージェント設定、`PathfindingModifier`の重み付け、レイキャスト直進判定などを解説します。
1. Robloxの経路計算:3Dナビメッシュボクセルグリッド
空間幾何の仕組みを把握して探索失敗を防ぐ:
- ボクセルグリッド: AgentRadiusが通路の幅を超えているとNoPathになります。
- エージェントパラメータ: モデルの体型に合わせて半径・身長・ジャンプ可否を設定。
- ウェイポイント配列: 座標とアクション(歩行/ジャンプ)を格納した配列。
2. PathfindingModifierとカスタム地形コスト
NPCが好むルートや回避すべき危険エリアを制御する:
- PathfindingModifier: パーツに溶岩や道路などのラベルを付与。
- コスト倍率: 危険地帯のコストを無限大に設定して迂回させる。
- PassThrough設定: 破壊可能なドアなどを通行可能として扱う。
3. 移動の引っかかりを解消:レイキャスト最適化
スムーズで知的な移動を実現するテクニック:
- 直視レイキャスト: 障害物がない場合はウェイポイントを経由せず直進。
- 到達判定の緩和: 3〜4スタッド手前で次のポイントへ移行し失速を防ぐ。
- 再計算スロットリング: 経路再計算は0.3〜0.5秒おきに抑制する。
4. 実践Luaスクリプト:追跡NPC AI
スタック検知とレイキャスト直進を備えた高機能スクリプト:
ServerScriptService.SmartNPCChaser
-- PathfindingService 実装スクリプト
local PathfindingService = game:GetService("PathfindingService")
機能:カスタム体型での探索、タイムアウト時のジャンプ脱出、アクション同期。
5. 多数のNPCを動かすパフォーマンス最適化
50体以上のNPCをサーバーラグなしで制御する方法:
- クライアント補間: サーバーは座標のみ計算し、描画はクライアントで補間。
- 距離別LOD: 遠くのNPCは更新頻度を大幅に下げる。
- リクエスト制限遵守: 毎分500回の探索制限を超えないようキュー管理。
よくある質問(Roblox Pathfinding)
Path.StatusがNoPathになる理由は?
目標地点が障害物内にあるか、通路の幅がAgentRadiusより狭いためです。
壁の角に引っかかるのを防ぐには?
AgentRadiusをキャラクターの実寸より少し大きめに設定すると解消されます。
MoveToとPathfindingServiceの違いは?
MoveToは直線移動のみ、PathfindingServiceはA*で障害物を迂回します。