在 Unity 中使用 NavMeshAgent
在 Unity 中,NavMeshAgent 是一个功能强大的组件,允许您为游戏中的角色或对象实现寻路和导航。它利用 Unity 的内置导航系统来计算 NavMesh 表面上的路径。在本教程中,我们将通过代码示例介绍设置和使用 NavMeshAgent 的基础知识。
先决条件
设置 NavMesh 在 Unity
在我们深入使用 NavMeshAgent 之前,我们需要在场景中设置一个 NavMesh。
创建导航网格表面:
- 转到'GameObject -> 3D Object -> NavMesh Surface'。这将创建一个附加了 'NavMeshSurface' 组件的新游戏对象。
- 根据场景需要调整 NavMesh Surface 组件的设置。
烘焙导航网格:
- 单击 '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 的内置导航系统实现游戏中角色或对象的基本移动。