NPCの移動・経路探索・ウェイポイント
1. 移動機能の種類
Citizensの移動は大きく分けて次の種類があります。
- テレポート/位置移動:NPCを実行者の位置や指定座標へ移動。経路を歩かせるわけではありません。
- Navigatorによる経路移動:NPCがブロックや障害物を考慮して目標位置へ進みます。
- Waypoints(ウェイポイント):複数の位置を保存し、順番・ランダム・巡回などで移動させます。
- 追従/ホーム:プレイヤーやNPCを追いかける、決められたホーム位置へ戻るなどの動作。
2. よく使うコマンド
/npc tphere /npc moveto <座標など> /npc pathto me /npc path /npc pathopt /npc speed 1 /npc follow <プレイヤー名またはNPC ID> /npc home /npc anchor --save <名前>
これらは用途を示す例です。座標の書式や必須引数・フラグは /npc help <コマンド> で確認してください。/npc path はウェイポイント編集画面を開き、Navigatorの即時移動コマンドとは目的が異なります。
3. Waypoint Editor
ウェイポイントはNPCが通過する場所を保存したものです。/npc path でエディタを開いて位置を登録し、必要に応じてプロバイダを選択します。
公式Wikiに記載されている主なプロバイダ:
| Provider | 動作 | 用途 |
|---|---|---|
linear | 保存したウェイポイントを順番に巡回 | 通路巡回、駅員の定期移動 |
wander | ランダムに歩き回る | 町の住人、環境演出 |
guided | 目的地と補助点を用いてランダムに移動 | 道に沿った巡回など |
プロバイダは /waypoints provider <名前> で指定する方式が案内されています。実際の利用可能なプロバイダは /waypoints help で確認してください。
4. Waypoint Triggers
linear/guidedなどの対応プロバイダでは、ウェイポイントに到達した際のトリガーを設定できます。公式Wikiでは、特定地点での停止、速度変更、発話などを例として挙げています。
利用可能なトリガーはエディタ内の triggers 案内で確認してください。すべてのプロバイダが同じトリガーに対応するとは限りません。
5. 経路探索オプション
/npc pathopt には、現行コマンド資料で次のような項目が案内されています。
- 水を避けるかどうか
- ドアを開けるかどうか
- 経路探索範囲
- 路線から外れたときの距離マージン
- 落下可能距離
- Citizens独自/Minecraft系の経路探索方式
- 攻撃範囲、目的地周辺の停止判定
- 経路探索中のテレポートを避ける設定
項目名やデフォルト値は実装変更があり得るため、/npc help pathopt を参照してください。パスファインダーの範囲を必要以上に大きくすると負荷が増える場合があります。長距離移動は区間ごとに分けることも検討してください。
6. 詰まり・経路が見つからない場合
確認順:
- NPCが移動可能な状態か、AI/Navigatorが無効化されていないか。
- 目的地とNPCの間に通行不能なブロック、液体、段差、閉じたドアなどがないか。
- 経路探索範囲が目的地までの距離に足りているか。
pathoptにより水回避・ドア開閉・落下距離などが制限されていないか。- 他プラグインがNPCの移動、ワールド保護、エンティティ移動を妨げていないか。
/npc debugの経路/ナビゲーション関連情報やdebug-pathfinding設定を検討する。- 短距離の開けた場所で再現テストする。
設定ファイルにある経路探索デバッグは、調査が終わったら無効に戻してください。
7. APIから移動させる
Java APIではNavigatorを通じて目的地を指定する方法が紹介されています。
npc.getNavigator().setTarget(destinationLocation);
NPCがスポーンしているか、目的地が有効か、経路移動が可能かを呼び出し側で考慮してください。APIの詳細は 公式API Wiki とJavadocを参照してください。