【Unity】NavMesh Agent实现自动寻路
创始人
2025-05-31 02:12:57

在Unity中,可以使用自带导航系统(Navigation System)实现自动寻路。

一、创建NavMesh表面

首先在Unity场景中创建一个NavMesh表面,用于描述场景中可行走的区域。

在Unity 5.6或更高版本中,可以通过以下步骤创建NavMesh表面:

  1. 选择场景中的地形或物体,右键菜单中选择“Navigation” -> “Bake NavMesh”。

  1. 在弹出的“NavMesh Bake”窗口中,设置NavMesh的大小和精度,并设置NavMesh的各个层级的区域类型(例如地面、墙壁、楼梯等)。

  1. 点击“Bake”按钮,等待Unity计算NavMesh表面。

这样就可以在场景中生成NavMesh表面,表示可行走区域。

二、使用NavMesh Agent组件

接下来,在需要寻路的物体上添加一个NavMesh Agent组件,用于计算路径并移动物体。

  1. 在Unity中选择需要寻路的物体,添加NavMesh Agent组件。

  1. 在NavMesh Agent组件中设置Agent的属性,包括移动速度、旋转速度等等。

三、计算路径

当NavMesh Agent组件添加到物体上后,使用C#脚本来计算路径并让物体移动。

以下是一个基本的计算路径的脚本:

using UnityEngine;
using UnityEngine.AI;public class MoveToDestination : MonoBehaviour {public Transform target;NavMeshAgent agent;void Start () {agent = GetComponent();}void Update () {agent.SetDestination(target.position);}
}

在这个脚本中,首先获取NavMesh Agent组件,并将需要移动到的目标位置设置为NavMesh Agent的目标位置。

然后在Update函数中,通过调用SetDestination方法来计算路径并移动物体。

四、使用Raycast避免障碍

在计算路径时,需要避免障碍物,确保物体沿着可行走区域移动。

可以使用Raycast来检测物体前方是否有障碍物。

如果检测到障碍物,则通过调整目标位置来绕过障碍物。

以下是一个基本的避障脚本:

using UnityEngine;
using UnityEngine.AI;public class AvoidObstacles : MonoBehaviour {public Transform target;NavMeshAgent agent;void Start () {agent = GetComponent();}void Update () {RaycastHit hit;if (Physics.Raycast(transform.position, transform.forward, out hit, 1.0f))         {// 如果前方有障碍物,则绕过障碍物Vector3 targetPosition = transform.position + (transform.right * (Random.Range(0, 2) == 0 ? -1 : 1) * 2.0f);NavMeshHit navMeshHit;if (NavMesh.SamplePosition(targetPosition, out navMeshHit, 2.0f, NavMesh.AllAreas)) {agent.SetDestination(navMeshHit.position);}} else {// 如果前方没有障碍物,则移动到目标位置agent.SetDestination(target.position);}}
}

在这个脚本中,首先使用Raycast检测物体前方是否有障碍物。

如果检测到障碍物,通过调整目标位置来绕过障碍物。

然后通过调用NavMesh的SamplePosition方法来找到最近的可行走位置,并设置NavMesh Agent的目标位置。

如果前方没有障碍物,则直接移动到目标位置。

五、总结

在本教程中,介绍了如何使用Unity自带的导航系统(Navigation System)实现寻路功能。

首先,需要在场景中创建NavMesh表面,用于描述场景中可行走的区域。

然后,需要在需要寻路的物体上添加NavMesh Agent组件,并使用C#脚本计算路径并移动物体。

最后,介绍了如何使用Raycast来避免障碍,确保物体沿着可行走区域移动。

相关内容

热门资讯

荼蘼什么意思 岁月缱绻葳蕤生香... 感谢作者【辰夕】的原创独家授权分享编辑整理:【多肉植物百科】百科君坐标:云南 曲靖春而至,季节流转,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...