Unity3D自动寻路系统Navigation(三)之人物上下斜坡设置
来源:互联网 发布:淘宝招聘网络唇模 编辑:程序博客网 时间:2024/04/29 22:57
由于最近在一个VR项目中用到寻路系统,当然这也是开发游戏、VR等项目中必须熟悉的。但是您有没有用寻路系统来设置过上下斜坡,今天就和大家一起来探讨一下遇到的问题和提供一些解决方案。废话不多说,直接上干货。
首先来介绍一下,要实现的上下斜坡自动寻路的功能:一群人物从站台1通过图中的红色箭头达到站台2上Cube位置处。
烘焙上下斜坡的问题
在用Unity的自动寻路系统的时候,如果人物不能实现按照规定到达目的地,有绝大的原因是烘焙寻路出现了问题,所以这是我们首先需要重视的地方。
下面就是一开始我烘焙的寻路,大家可能发现问题了,就是在两个红圈的位置是没有烘焙上的,并且区域很大,当人物寻路到这里的时候很容易卡在这里。那就让我们来设置烘焙的参数吧。
首先来介绍一个各个参数的含义:
Agent Radius:烘焙的半径,其数值越小则烘焙效果越好;
Agent Height:烘焙的高度,人物通过的高度;
Max Slope:烘焙的最大坡度,大于这个坡度的面将不会烘焙;
Step Height:烘焙的台阶高度,如果高度差小于设置值,将视为连接。所以我们将烘焙半径调小点就可以解决这个问题了。
我将烘焙半径设置为0.1,烘焙效果如下图,上坡和下边的地面连接处没有烘焙上的区域就很小啦。斜坡角度和连接问题
如果上坡的角度很大,人物也会卡在上坡中,我现在设置的上坡角度是40度。如果把角度设置为30度或者以下,人物就可以很顺利的爬上斜坡啦。
如果下坡的角度很大,人物就会直接跳下斜坡,我现在设置的下破的角度是50度。可以从图中看到人物是直接跳下来的。如果把角度设置为40度或者以下,人物就可以很顺利的下斜坡啦。
还有就是斜坡与地面和站台连接处的问题,它们的连接之间一定不能有空隙,否则人物也容易卡在空隙处。如下图中,斜坡与站台没有完全连接上,有个很小的缝隙,即使寻路也烘焙得没有问题,人物有时候也会卡在这个地方。
3、人物容易卡在寻路的边缘处
因为寻路就是解决的人物通过查找最短的路径(在忽略消耗体力值前提下),并最终达到目的地的问题,所以在上下坡也经常会遇到人物会沿着斜坡一边运动,这个就可能使人物卡在烘焙好的寻路边缘处。
我的解决办法是设置中间目标物,让其绕开寻路边缘运动,这就需要设置几个中间目标,当人物到达一个目标的时候,然后向着下一个目标运动。
从图中可以看出设置了三个目标物,这样人物就可以顺利到达目标3啦。
欢迎大家一起来讨论!!!
附上代码
[RequireComponent(typeof(NavMeshAgent))]public class NavigationTest : MonoBehaviour { public Transform targetOne; public Transform targetTwo; public Transform targetThree; private NavMeshAgent navAgent; private float distanceOne; private float distanceTwo; // Use this for initialization void Start () { navAgent = transform.GetComponent<NavMeshAgent>(); navAgent.SetDestination(targetOne.position); } // Update is called once per frame void Update () { CheckReachTarget(); } void CheckReachTarget() { distanceOne = Vector3.Distance(transform.position,targetOne.position); distanceTwo = Vector3.Distance(transform.position,targetTwo.position); if (distanceOne < 1f) { navAgent.SetDestination(targetTwo.position); } if (distanceTwo<1f) { navAgent.SetDestination(targetThree.position); } }}
- Unity3D自动寻路系统Navigation(三)之人物上下斜坡设置
- Unity3d 自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃
- Unity 自动寻路 Navmesh 之 跳跃,攀爬,斜坡
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- 自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity3D 利用character controller控制人物在场景中移动和利用Navmesh Agent设置人物自动寻路
- Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity3d里面的自动寻路Navigation组件
- Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
- Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh) - Tonge
- Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
- Unity3D - 导航网格自动寻路(Navigation Mesh)
- 管理系统UI之三:隐藏Navigation Bar(Hiding the Navigation Bar)
- Linun下安装Redis数据库使用
- CSS3绘制各种几何图形练习
- 2016年秋招经历(Android开发工程师)
- 使用记事本+命令行 编辑运行.java文件
- 安卓(Android)os获取可用空间大小的方法getFreeSpace()
- Unity3D自动寻路系统Navigation(三)之人物上下斜坡设置
- Android自带的emoji表情的使用
- Linux 硬链接与软链接
- 数据持久化之SharedPreferences
- javaScript~Array对象解释~pop,sort等方法解释~
- 【热搜词方案】android/java热搜词方案设计
- Mac架设DNScrypt & Dnsmasq
- 有限状态机(FSM)的设计与实现(二)
- OSGI企业应用开发(五)使用Blueprint整合Spring框架(二)