在 Unity 中使用 NavMeshAgent

在 Unity 中,NavMeshAgent 是一个功能强大的组件,允许您为游戏中的角色或对象实现寻路和导航。它利用 Unity 的内置导航系统来计算 NavMesh 表面上的路径。在本教程中,我们将通过代码示例介绍设置和使用 NavMeshAgent 的基础知识。

先决条件

设置 NavMesh 在 Unity

在我们深入使用 NavMeshAgent 之前,我们需要在场景中设置一个 NavMesh。

  1. 创建导航网格表面:

    • 转到'GameObject -> 3D Object -> NavMesh Surface'。这将创建一个附加了 'NavMeshSurface' 组件的新游戏对象。
    • 根据场景需要调整 NavMesh Surface 组件的设置。
  2. 烘焙导航网格:

    • 单击 'NavMesh Surface' 组件中的 'Bake' 按钮,为场景生成导航网格。
    • 确保您的环境(地形、障碍物等)配置正确,以实现准确的寻路。

在代码中使用 NavMeshAgent

现在,让我们编写一些代码来使用 NavMeshAgent 进行 GameObject 移动。

第 1 步:将 NavMeshAgent 连接到 GameObject

  • NavMeshAgent 组件附加到Unity 编辑器中的游戏对象。您可以通过选择游戏对象,单击 'Add Component',然后添加 'NavMeshAgent' 来完成此操作。

第 2 步:编写运动脚本

  • 创建 一个新的 C# 脚本(例如 'PlayerController.cs')并使用 NavMeshAgent 组件将其附加到游戏对象。在您喜欢的代码编辑器中打开脚本。
using UnityEngine;
using UnityEngine.AI;

public class PlayerController : MonoBehaviour
{
    private NavMeshAgent navMeshAgent;

    void Start()
    {
        navMeshAgent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        // Check for player input or any other conditions to trigger movement
        if (Input.GetMouseButton(0)) // Example: Move towards mouse click position
        {
            MoveToClickPosition();
        }
    }

    void MoveToClickPosition()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))
        {
            // Move NavMeshAgent towards the clicked position
            navMeshAgent.SetDestination(hit.point);
        }
    }
}

第 3 步:设置场景并测试

  • 确保场景中存在带有 NavMeshAgent 的游戏对象和附加脚本。
  • 在 Unity 编辑器中点击 Play 并观察行为。
  • 单击 'NavMesh' 表面上的任意位置,游戏对象应向该位置移动。

概括

在本教程中,您学习了如何设置和使用 NavMeshAgent 在 Unity 中进行寻路和导航。通过遵循这些步骤和代码示例,您可以使用 Unity 的内置导航系统实现游戏中角色或对象的基本移动。

推荐文章
在 Unity 中实现 NavMesh 代理
在 Unity 中创建跟随玩家的 NPC
在 Unity 中实现敌人的 AI
如何利用 Unity 中的 AI 支持制作 FPS
如何在 Unity 中制作鹿的 AI
Unity 将敌人添加到 2D 平台游戏中
Unity Asset Store 包回顾 - Zombie AI 系统