Unity で NavMesh を使用して NPC にプレイヤーを追いかけさせる方法
このチュートリアルでは、Unity の NavMesh システムを使用して、プレイヤーを追跡する NPC を作成します。NavMesh は効率的なパスファインディングと障害物回避を提供するため、3D 環境での AI の動作に最適です。
ステップ1: シーンの設定
NavMesh を実装する前に、適切なシーン設定が必要です。
- Unity で新しい 3D プロジェクトを作成します。
- 地面として機能する Plane を追加します。
- プレーヤーを表す Cube または任意の 3D モデルを追加します。 Player という名前を付けます。
- NPC を表す別の Cube または 3D モデルを追加します。 NPC という名前を付けます。
- プレイヤーと NPC を平面上の異なる位置に配置します。
ステップ2: NavMeshのベイク
Unity の NavMesh システムを使用するには、ナビゲーション メッシュをベイクする必要があります。
- 階層内で地面の平面を選択します。
- インスペクターで、コンポーネントの追加 をクリックし、NavMeshSurface を追加します。
- NavMeshSurface コンポーネントで、Plane が歩行可能なサーフェスとしてマークされていることを確認します。
- NavMeshSurface コンポーネントの Bake ボタンをクリックして、NavMesh を生成します。
- オプション: 障害物 (壁など) がある場合は、NPC の動きをブロックする NavMeshObstacle コンポーネントがあることを確認します。
ステップ3: NavMeshAgentの追加
ここで、Unity のパスファインディングを使用するために NPC を準備します。
- 階層内の NPC を選択します。
- インスペクターで、コンポーネントの追加 をクリックし、NavMeshAgent を追加します。
- 必要に応じて、速度、加速度、停止距離などの NavMeshAgent プロパティを調整します。
ステップ4: チェイススクリプトの作成
次に、NPC がプレイヤーを追跡するスクリプトを作成します。
- プロジェクト パネルを右クリックし、作成 > C# スクリプト を選択します。NPCChase という名前を付けます。
- スクリプトをダブルクリックして、コード エディターで開きます。
- デフォルトのコードを次のコードに置き換えます。
using UnityEngine;
using UnityEngine.AI;
public class NPCChase : MonoBehaviour
{
public Transform player; // Reference to the player's position
private NavMeshAgent agent; // Reference to the NavMeshAgent
void Start()
{
// Get the NavMeshAgent component
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
if (player != null)
{
// Set the agent's destination to the player's position
agent.SetDestination(player.position);
}
}
}
ステップ5: スクリプトとプレーヤー参照の割り当て
最後に、スクリプトを割り当てて、プレーヤー参照を設定します。
- 階層内の NPC を選択します。
- NPCChase スクリプトを NPC にドラッグ アンド ドロップします。
- インスペクターで、スクリプト内の Player フィールドを見つけます。
- 階層から Player ゲームオブジェクトを Player フィールドにドラッグします。
ステップ6: シーンのテスト
セットアップをテストするには:
- Unity エディターの 再生 ボタンを押します。
- プレーヤーを移動します (例: キーボードまたはコントローラー入力を使用)。
- NPC が動的に経路探索し、プレイヤーを追跡し、該当する場合は障害物を回避している様子を観察します。
オプション: 動作のカスタマイズ
NPC の動作をさらに細かく調整できます。
- 停止距離: NavMeshAgent の 停止距離 を調整して、NPC が特定の範囲で停止するようにします。
- 障害物回避: 障害物を正確に回避するには、障害物に NavMeshObstacle コンポーネントがあることを確認します。
- アニメーション: 速度に基づいてアニメーションをトリガーすることで、NPC の動きをよりリアルにします。
結論
Unity の NavMesh システムを使用して、プレイヤーを動的に追跡する NPC を作成しました。このアプローチは堅牢で、より複雑な AI 動作に簡単に拡張できます。さまざまな設定を試して、NPC のパスファインディングをゲームのニーズに合わせて調整してください。