unity 自动寻路NavMesh
在项目开发中有时候,会用到unity自带的自动寻路系统NavMesh,今天就说下他的简单用法,NavMesh就是将游戏场景中复杂的结构组织关系简化为带有一定信息的网格,进而在这些网格的基础上通过一系列的计算来实现自动寻路,在导航中,只需要给导航物体挂载到导航物体上,导航物体便会自行根据目标点来寻找符合条件的路线,并沿着该路线行进到目标点。
一、实现物体通过自动寻路移动到指定地点
1.首先就是编辑一个简易的场景:
2.选中场景中的对象物体,将Static设置为Navigation Static复选框,unity就会通过选中的对象生成导航网格:
3.选择菜单栏中的Window--->Navigation命令,弹出Navgation视图。然后选择Navgation视图中的Bake按钮生成导航网格
4.就会生成相应的bake信息,其中蓝色区域就是可以进行移动的区域:
5.创建一个可移动的物体,这里就用一个胶囊体代替,为其添加NavMesh Agent组件,下面讲解一下这个组件的具体信息:
Base offset 与地面偏移高度
speed 移动速度
Angular Speed 转角速度 ,转身速度 角速度: 最高转速(度/秒)。
Acceleration 加速度,启动时的 最大加速度。
Stopping Distance 停止距离 ,,制动距离:制动距离。到目的地的距离小于这个值,代理减速。
Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks
Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
Height 高度:代理的高度(用于调试图形)。
Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到。
6.为胶囊体添加移动脚本,通过鼠标点击移动到指定地点,代码如下:
public Camera camera; //相机 private NavMeshAgent navMeshAgent;// Use this for initializationvoid Start(){navMeshAgent = GetComponent<NavMeshAgent>();}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){if (navMeshAgent != null){//获取从主相机发出的一条射线Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit mHit;if (Physics.Raycast(mRay, out mHit)){//当碰撞到Terrain使获取到当时的位置if (mHit.collider.gameObject.tag == "Player"){navMeshAgent.destination = mHit.point;}} }}}
具体效果:
备注:如果想实现可以直接跳跃到指定的目标位置处,可以设置Drop和Jump Distance,然后重新Bake就可以了:
二、实现不同物体,沿自己的专有道路移动到指定位置
1.搭建自己想要的场景信息:
2.像上面的方式一样,对所有路径进行bake处理,但是唯一不同的需要设置不同的Layer,这里我们设置三个不同的layer
3.先为不同的路径设置对应的layer
4.为不同的移动的物体设置对应的layer:
5.然后添加移动代码:
public GameObject TargetGo;public GameObject[] Solider;// Use this for initializationvoid Start(){for (int i = 0; i < Solider.Length; i++){Solider[i].GetComponent<NavMeshAgent>().destination = TargetGo.transform.position; }}
6.移动效果
转载自:https://blog.csdn.net/yu1368072332/article/details/82980060
unity 自动寻路NavMesh相关推荐
- Unity手游之路十自动寻路Navmesh之跳跃,攀爬,斜坡
转载 Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡 分类: unity2013-12-27 00:50 6545人阅读 评论(5) 收藏 举报 unity3dNavme ...
- Unity 使用NavMesh实现简易的摇杆功能
Unity 使用NavMesh实现简易的摇杆功能 引言 在日常的unity项目开发中,经常会遇到角色移动的问题,在这里我们作一个建议的摇杆功能来控制角色的移动.要求如下: 摇杆在没有UI遮挡的任何位置 ...
- Unity手游之路九自动寻路Navmesh之高级主题
http://blog.csdn.net/janeky/article/details/17492531 之前我们一起学习了如何使用Navmesh组件来实现最基本的角色自动寻路.今天我们再继续深入探索 ...
- Unity手游:自动寻路Navmesh 跳跃 攀爬 斜坡
原地址:http://dong2008hong.blog.163.com/blog/static/46968827201403114644210/ 步骤 1.在场景中摆放各种模型,包括地板,斜坡,山体 ...
- unity 自动寻路
导入Astar pathfinding 插件 物体添加 Pathfinder 组件 --生成障碍物 -- 选中敌人 添加 AIpath 组件 orientation 方向选择为2D或3D 调整--R ...
- unity 自动寻路爬楼梯效果
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; ...
- 在Unity中使用NavMesh导航
In this tutorial we will learn about Navmesh in Unity, how to create it and use it on your game as p ...
- 11.5项目小结(推箱子Unity导航系统)
一.推箱子 重难点: 箱子移动,推动箱子. 1.移动: 思路: 按下WASD键,先改变player的角度,然后沿着Z方向移动: if(Input.GetKeyDown(KeyCode.W)){Vect ...
- 【Unity3D日常开发】自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 参考文章:列表 Unity3D深入浅出 - 导航网格自动寻路(Navigat ...
最新文章
- markdown数学公式全集
- leetcode-----给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。
- 解决样本不平衡问题的奇技淫巧 汇总
- hadoop com.mysql.jdbc.driver_hadoop – Impala找不到com.mysql.jdbc.Driver
- IDEA 一直不停的scanning files to index解决办法
- HighCharts点击柱形或饼块等加URL或Click事件
- == 和 equals() 区别
- 使用Prometheus和Grafana监视开放自由
- LeetCode 747. 至少是其他数字两倍的最大数
- 使用request获取访问者的真实IP
- 使用Visual Studio来创建动态库/静态库,并加载
- 函数的参数,参数为数组
- R Wilcoxon秩和检验
- Echarts图表移动端手机横屏展示
- 弱网优化、网络抖动、网络延时,这些问题,怎么处理?
- java map 缓存数据_java使用hashMap缓存保存数据的方法
- 设置元素旋转中心点(transform-origin)
- HTML table 属性 运用实例
- MySQL中length()、char_length()的区别和用法
- mybatis-plus 读写空间数据 geometry类型
热门文章
- 英汉互译教程---生词
- “颜经济”下的科技“美”学战役
- contenteditable H5聊天室发送表情
- #边学边记 必修4 高项:对事的管理 第5章 项目成本管理 之 项目成本估算
- HBase常见面试题
- 计算机教室网络平面示意图,计算机机房平面布置图.doc
- 计算机软考高级职称论文,关于计算机软考,这里可以解决你所有的问题
- BP神经网络C语言实现
- Kuhn-Munkres(KM算法)简单笔记
- java毕业设计——基于java+JSP+MySQL的电脑彩票销售管理系统设计与实现(毕业论文+程序源码)——彩票销售管理系统