Unity3D自动寻路之Nav Mesh Agent(导航网格代理)
Nav Mesh Agent
效果图
创建地面.
1.1 在Hierarchy下创建一个空的游戏对象命名为Ground:
右键 –> Create Empty –>重命名为Ground.
Ground下面创建五个Plane游戏对象:
右键 –> 3D Object –> Plane, 创建一个之后进行复制即可.`
提示:创建一个之后,按Ctrl + D 进行复制即可.
1.2 两个Plane分开,中间用另外三个Plane游戏对象进行连接.添加导航.
2.1 先添加导航窗口: 菜单栏Window –> Navigation
2.2 进行烘焙: 选中Ground下所有的Plane –> 点击Inspector下static边上的三角形 –> 选中Navigation Static –> 切换到Navigation窗口 –> 点击Bake –> 直接点击 Bake进行烘焙.
- Hierarchy下创建一个Cube作为导航的目标点.创建一个Sphere最为Player.
选中Player –> Inspector界面下Add Component 添加组件 –> 搜索Nav Mesh Agent(实现自动导航)组件进行添加 –> 在Project下创建一个Scripts用来存放C#脚本 –> 右键Create一个C#脚本,起名字为PlayController - 编写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 | 自动遮罩 |
Unity3D自动寻路之Nav Mesh Agent(导航网格代理)相关推荐
- 【Unity】导航基本组件:Nav Mesh Agent、Off Mesh Link、Nav Mesh Obstacle
文章目录 Nav Mesh Agent 导航网格代理 属性 Off Mesh Link 网格外链接 属性 链接是否成功 静态障碍物和动态障碍物 静态障碍物 动态障碍物 Nav Mesh Obstacl ...
- 《UnityAPI.NavMeshAgent导航网格代理》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Unity+NavMeshAgent+立钻哥哥++OK++)
<UnityAPI.NavMeshAgent导航网格代理> 版本 作者 参与者 完成日期 备注 UnityAPI_NavMeshAgent_V01_1.0 严立钻 2020.09.10 # ...
- Unity --- 导航网格 与 导航的使用
导航网格和导航组件有关 这个导航组件有啥用呢? --- 答案就是用来进行寻路的 这个导航组件不仅帮我们获取对应的导航信息,而且还会帮我们进行位置的移动 有了导航组件的话,我们的游戏物体将会具有自动绕过 ...
- 《UnityAPI.NavMesh导航网格》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Unity+NavMesh+CalculatePath+立钻哥哥++OK++)
<UnityAPI.NavMesh导航网格> 版本 作者 参与者 完成日期 备注 UnityAPI_NavMesh_V01_1.0 严立钻 2020.08.27 #<UnityAPI ...
- 详解Unity中的Nav Mesh新特性|导航寻路系统 (二)
前言 第一篇我们简要概述了新版NavMesh的一些新增功能,以及旧版的对比.本篇我们来讲一讲NavMeshSurface.NavMeshLink这两个组件的参数以及如何应用,接下来就进入正题吧. 本系 ...
- 了解导航网格 Navigation Mesh
原文:https://www.jianshu.com/p/490a9128b248 这篇文章,首先会介绍什么是导航网格,它在 3D 游戏中起到了什么样的作用.然后会介绍目前导航寻路最常用的第三方开源库 ...
- Unity3D导航网格,矩阵旋转,欧拉旋转
旋转(欧拉.矩阵) 1.Transform:position(平移).rotation(旋转).scale(缩放). 2.四元数:应于transform组件中的rotation属性,这个属性的类型其实 ...
- [unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析
recast navigation navmesh导航网格算法源码分析 Author: 林绍川 recast navigation navmesh是unity3d ue4内置的寻路算法 本文为了方便 ...
- 【Unity VR开发】结合VRTK4.0:导航网格限制移动区域
前言: 当别人质疑你的时候千万不要当一回事,因为他只是看到了表面,也不要去相信公司领导给你的承诺,在你付出的时候,他会觉得很满意,但过去了这风波,你就会像空气一样,什么也不是,你永远没有资格跟他说三道 ...
- Cocos Creator3.x NavMesh导航网格寻路(一)
前言 在游戏开发过程中,寻路可能是大多数游戏都必不可少的功能.2d游戏中最常用的就是A* 寻路了.在3d游戏中,对于一些简单的,没有高度地面A* 寻路同时也是可以使用的,但是对于一些地面比较复杂的游戏 ...
最新文章
- 天线巴伦制作和原理_一种基于LTCC技术的新型Marchand巴伦滤波器
- 海明嵌入Hamming Embedding生成Binary Signature之matlab程序代码
- KDD 2021 | 小红书推荐多样性解决方案:SSD在质量、多样性之间获得较好权衡
- C#DotNetBar TabControl将水平标签设置成竖直
- 学维修电脑要多久_学厨师要多久才出师
- 3种双集群系统方案设计模式详解
- C语言 makefile
- OPC数据访问方法简介
- python调用c++深度学习模型生成的dll(传入图片,返回多个结果)
- Hi3861开发板搭建环境
- 刚安装了极域电子教室,默认密码是什么?(教师端)
- 读取自定义配置文件属性值
- android 常用图像密码,这几种Android图形密码最常用
- 建模你不能不知道这些网站能接单 | 建议收藏
- Google推出拼音输入法了!
- 中国跨5个时区,东南西北的极点坐标信息
- LNMP部署应用——架设Discuz论坛——实验过程超详细!快来跟做!
- eclipse查看properties
- linux进程命令面试,面试常问的 25+ 个 Linux 命令
- Unity 3d项目的崩溃收集机制