Unity で NavMesh を使用して NPC にプレイヤーを追いかけさせる方法

このチュートリアルでは、Unity の NavMesh システムを使用して、プレイヤーを追跡する NPC を作成します。NavMesh は効率的なパスファインディングと障害物回避を提供するため、3D 環境での AI の動作に最適です。

ステップ1: シーンの設定

NavMesh を実装する前に、適切なシーン設定が必要です。

  1. Unity で新しい 3D プロジェクトを作成します。
  2. 地面として機能する Plane を追加します。
  3. プレーヤーを表す Cube または任意の 3D モデルを追加します。 Player という名前を付けます。
  4. NPC を表す別の Cube または 3D モデルを追加します。 NPC という名前を付けます。
  5. プレイヤーと NPC を平面上の異なる位置に配置します。

ステップ2: NavMeshのベイク

Unity の NavMesh システムを使用するには、ナビゲーション メッシュをベイクする必要があります。

  1. 階層内で地面の平面を選択します。
  2. インスペクターで、コンポーネントの追加 をクリックし、NavMeshSurface を追加します。
  3. NavMeshSurface コンポーネントで、Plane が歩行可能なサーフェスとしてマークされていることを確認します。
  4. NavMeshSurface コンポーネントの Bake ボタンをクリックして、NavMesh を生成します。
  5. オプション: 障害物 (壁など) がある場合は、NPC の動きをブロックする NavMeshObstacle コンポーネントがあることを確認します。

ステップ3: NavMeshAgentの追加

ここで、Unity のパスファインディングを使用するために NPC を準備します。

  1. 階層内の NPC を選択します。
  2. インスペクターで、コンポーネントの追加 をクリックし、NavMeshAgent を追加します。
  3. 必要に応じて、速度、加速度、停止距離などの NavMeshAgent プロパティを調整します。

ステップ4: チェイススクリプトの作成

次に、NPC がプレイヤーを追跡するスクリプトを作成します。

  1. プロジェクト パネルを右クリックし、作成 > C# スクリプト を選択します。NPCChase という名前を付けます。
  2. スクリプトをダブルクリックして、コード エディターで開きます。
  3. デフォルトのコードを次のコードに置き換えます。
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: スクリプトとプレーヤー参照の割り当て

最後に、スクリプトを割り当てて、プレーヤー参照を設定します。

  1. 階層内の NPC を選択します。
  2. NPCChase スクリプトを NPC にドラッグ アンド ドロップします。
  3. インスペクターで、スクリプト内の Player フィールドを見つけます。
  4. 階層から Player ゲームオブジェクトを Player フィールドにドラッグします。

ステップ6: シーンのテスト

セットアップをテストするには:

  1. Unity エディターの 再生 ボタンを押します。
  2. プレーヤーを移動します (例: キーボードまたはコントローラー入力を使用)。
  3. NPC が動的に経路探索し、プレイヤーを追跡し、該当する場合は障害物を回避している様子を観察します。

オプション: 動作のカスタマイズ

NPC の動作をさらに細かく調整できます。

  • 停止距離: NavMeshAgent の 停止距離 を調整して、NPC が特定の範囲で停止するようにします。
  • 障害物回避: 障害物を正確に回避するには、障害物に NavMeshObstacle コンポーネントがあることを確認します。
  • アニメーション: 速度に基づいてアニメーションをトリガーすることで、NPC の動きをよりリアルにします。

結論

Unity の NavMesh システムを使用して、プレイヤーを動的に追跡する NPC を作成しました。このアプローチは堅牢で、より複雑な AI 動作に簡単に拡張できます。さまざまな設定を試して、NPC のパスファインディングをゲームのニーズに合わせて調整してください。