Unity3D自动寻路之Nav Mesh Agent(导航网格代理)

效果图

效果图

  1. 创建地面.
    1.1 在Hierarchy下创建一个空的游戏对象命名为Ground:
    右键 –> Create Empty –>重命名为Ground.
    Ground下面创建五个Plane游戏对象:
    右键 –> 3D Object –> Plane, 创建一个之后进行复制即可.`
    提示:创建一个之后,按Ctrl + D 进行复制即可.
    1.2 两个Plane分开,中间用另外三个Plane游戏对象进行连接.

  2. 添加导航.
    2.1 先添加导航窗口: 菜单栏Window –> Navigation
    2.2 进行烘焙: 选中Ground下所有的Plane –> 点击Inspector下static边上的三角形 –> 选中Navigation Static –> 切换到Navigation窗口 –> 点击Bake –> 直接点击 Bake进行烘焙.
    烘焙之后的效果

  3. Hierarchy下创建一个Cube作为导航的目标点.创建一个Sphere最为Player.
    选中Player –> Inspector界面下Add Component 添加组件 –> 搜索Nav Mesh Agent(实现自动导航)组件进行添加 –> 在Project下创建一个Scripts用来存放C#脚本 –> 右键Create一个C#脚本,起名字为PlayController
  4. 编写C#脚本
       public class PlayController : MonoBehaviour
       {
           //定义接收导航网络组件
           private NavMeshAgent nav;
           //定义目的地的方块
           public Transform cubePos;
           void Start()
           {
               //赋值
               nav = this.transform.GetComponent<NavMeshAgent>();
           }
           void Update()
           {
               //设置目的地的位置为方块的位置
               nav.SetDestination(cubePos.position);
           }
       }       

编写完成后, 将脚本拖拽到之前创建好的Sphere上面, 然后会在Inspector界面下看到该脚本下有一个CubePos,是用来设置目的地的位置,直接将之前创建好的Cube拖拽到CubePos上面即可.
5. 添加材质.
5.1 在Project中创建一个空的文件夹Metarials用来存放所有材质.
5.2 右键 –> Create –> Material –> Albedo –> 设置颜色 –> 拖动创建好的Material到游戏对象上面.
注意:一个材质只能使用一种颜色,不能为多个游戏对象添加颜色.可以创建多个材质来实现.
5.3 为桥和小球添加相应颜色的材质.
5.4 Ctrl + D 复制多个小球, 这里创建了三个材质,颜色分别是Red,Green,Blue.所以创建一个三个空的游戏对象用来存放不同颜色额的小球.
可以运行看一下效果.
6. 指定导航路径.
6.1 在之前添加的Navigation窗口下的Areas里面添加三个区域, Name分别为Red, Green, Blue.
6.2 分别选中三座桥,在各自的Navigation窗口下的Object里的Navigation Area中选中相对应的颜色(默认是地面).之后重新烘焙.
注意:改过Navigation Area之后要重新烘焙.
6.3 导航走的区域已经分好了, 但是默认状态下可以走所有的区域.下面修改每种颜色的Sphere可以走的区域. 选中需要修改的Sphere –> 在Nav Mesh Agent 组件里面的最下方有个 Area Mask –> 选中 Walkable(默认是全部) 和 自己可以走的颜色.
7. 运行之后会发现小球会在cube的外面转圈, 这是因为小球是有质量的, 可以在
Nav Mesh Agent组件中的Quality调整为None, 在运行.

面板中的一些参数

Object
Navigation Static勾选后表示该对象参与导航网格的烘焙
Generate OffMeshLinks勾选后可以跳跃导航网格和下落
Navigation Area物体烘焙网格属于哪个图层, 可通过代码让游戏人物走不同的路
Bake
Agent Radius具有代表性的物体半径, 半径越小生成的网格面积越大.和边缘的距离
Agent Height具有代表性物体的高度
Max Slope斜坡的坡度
Step Height台阶高度
Drop Height允许跳跃最大下落距离
Jump Distance允许最大的跳跃距离
Manual Voxel Size手动输入像素值
Min Region Area网格面积小于该值则不生成导航网格
Height Mesh选中该项,将会保存高度信息,同事也会消耗一些性能和存储空间

Nav Mesh Agent 组件面板

Agent Size尺寸控制
Radius物体的半径
Height物体的高度
Base Offset偏移度
Steering行动控制
Speed物体进行的最大速度
Angular Speed行进过程中转向是的角速度
Acceleration物体的行进加速度
Stopping Distance距离目标点小于多远距离后便停止行进
Obstacle Avoidance躲避障碍参数
Quality质量
Priority优先级
Path Finding路径寻找
Auto Traverse Off Mesh Link是否采用默认方式度过连接路径
Auto Repath在行进过程中,因某些原因中断的情况下,是否重新开始寻路
Auto Mask自动遮罩
  • 15
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
NavMeshAgentUnity引擎中的一个组件,用于控制角色的移动和寻路。通过使用NavMeshAgent,开发者可以为角色创建一个导航网格,标记可到达和不可到达的区域,并使角色能够自动寻找最优路径,避免与其他Agent和障碍物发生碰撞。NavMeshAgent组件自带了寻路和空间推理的脚本,可以帮助角色朝着设定的目标移动,并避免与其他Agent相互干扰。 要为角色添加NavMeshAgent组件,可以通过在角色的脚本中添加以下代码来实现:private NavMeshAgent agent;在Unity中,还有一个Unity NavMesh 2D寻路的功能可用于2D游戏的导航和寻路。你可以通过下载一个相关的存储库或将其添加到项目的Package Manager清单中来使用这个功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Unity3D实用组件:NavMesh Agent](https://blog.csdn.net/float_freedom/article/details/126179067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [NavMeshPlus:Unity NavMesh 2D寻路](https://download.csdn.net/download/weixin_42129797/15108830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值