如何使用 NavMesh 在 Unity 中让 NPC 追逐玩家

在本教程中,我们将使用 Unity 的 NavMesh 系统创建一个追逐玩家的 NPC。NavMesh 提供高效的寻路和避障功能,使其成为 3D 环境中 AI 行为的理想选择。

步骤 1:设置场景

在实现 NavMesh 之前,我们需要适当的场景设置:

  1. 在 Unity 中创建一个新的 3D 项目。
  2. 添加一个 Plane 作为地面。
  3. 添加 Cube 或任何 3D 模型来代表玩家。将其命名为 Player
  4. 添加另一个 Cube 或 3D 模型来表示 NPC。将其命名为 NPC
  5. 将玩家和NPC放置在平面上的不同位置。

步骤 2:烘焙 NavMesh

要使用 Unity 的 NavMesh 系统,我们需要烘焙导航网格:

  1. 在层次结构中选择地面平面。
  2. 在检查器中,单击 Add Component 并添加 NavMeshSurface
  3. 在 NavMeshSurface 组件中,确保平面被标记为可行走表面。
  4. 点击NavMeshSurface组件中的Bake按钮生成NavMesh。
  5. 可选:如果您有障碍物(例如墙壁),请确保它们具有 NavMeshObstacle 组件来阻挡 NPC 移动。

步骤 3:添加 NavMeshAgent

现在,我们将准备 NPC 来使用 Unity 的寻路功能:

  1. 在层次结构中选择 NPC。
  2. 在 Inspector 中,单击 Add Component 并添加 NavMeshAgent
  3. 根据需要调整 NavMeshAgent 属性,例如速度、加速度和停止距离。

步骤 4:编写追逐脚本

接下来,我们将创建一个脚本来让 NPC 追逐玩家:

  1. 在项目面板中单击右键,然后选择 Create > C# Script。将其命名为 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 的寻路以满足您的游戏需求。