NavMesh上下台阶, 斜坡, 跨越,跳下
# 这几个都是在Bake页签上的下面几个参数控制的,生成好寻路数据后,其他的都不需要我们处理
上下台阶参数:Step Height: 能走过的台阶高度
斜坡参数:Max Slope: 超过多少坡度就爬不上去
跨越参数:Jump Distance: 不超过多少米可以跨越(不然跨不过去)
跳下参数:Drop Height: 不超过多少米可以跳下(不然太危险)
# ground1为左1紫色地面,ground2为左2绿色地面,ground3为上面紫色斜坡开始,ground4为下面蓝色斜坡开始
# ground1, ground3_1, ground4_1勾选了Generate OffMeshLinks
# 注意
(#) A跳过去到B(A要勾上OffMeshLink), 如果要能从B跳回来到A(B要勾上OffMeshLink)
(#) C要能跳下到D上(C要勾上OffMeshLink),同时OffMeshLink只会处理跳下去, 没法跳上来, 跳上来可以用stepHeight来处理(不过要设置的很大,不符合正常规律), 或者加OffMeshLink来处理
# origin上的控制代码
public class NavMeshTest : MonoBehaviour { public NavMeshAgent _agent; public Transform _capsule; void Update() { if (Input.GetMouseButton(0)) { RaycastHit hit; var ray = Camera.main.ScreenPointToRay(Input.mousePosition); //摄像机方向发射1条射线 Debug.DrawRay(ray.origin, ray.direction * 20, Color.yellow); //画出这条射线 var maxDistance = 50; if (Physics.Raycast(ray, out hit, maxDistance)) //检测射线是否碰到地面 { _capsule.position = hit.point; _agent.destination = hit.point; Debug.DrawLine(ray.origin, hit.point, Color.red); } } } }
# ground1可以跨越到ground2,但是ground2回不到ground1(因为ground2没勾OffMeshLink)
# ground3_1可以跳下到ground3_2上,但是没法再跳上来
# ground4_1没法跳下到ground4_2上,因为高度太高了,超过了Drop Height设置的3.01米
【参考】
unity自带寻路Navmesh入门教程(二)_阿赵3D的博客-CSDN博客
Unity NavMesh (导航网格)初探 - 简书 (jianshu.com)