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)

 

posted @ 2022-06-16 00:29  yanghui01  阅读(309)  评论(0编辑  收藏  举报