欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Unity Nav Mesh导航系统的简单使用

Unity Nav Mesh导航系统的简单使用

2025/4/20 19:24:17 来源:https://blog.csdn.net/Yuze_miao/article/details/147351559  浏览:    关键词:Unity Nav Mesh导航系统的简单使用

标题

    • 1.下载。
    • 2.面板位置
    • 3.object面板
    • 4.Area面板
    • 5.Bake面板
    • 6.Agent面板
    • 7.Nav Mesh Agent组件
    • 8.Nav Mesh Obstacle组件
    • 9.简单使用

1.下载。

unity2022以上版本要去packageManager中下载。

2.面板位置

在这里插入图片描述

3.object面板

在这里插入图片描述
Navigation Static:设置该物体是否被列入静态寻路系统中。(如果你要的是一个动态的障碍那么不要勾选)。
Generate OffMeshLinks:它是 Navigation 面板中的一个选项 。勾选后,会依据设置的高度、可跳跃宽度等全局选项,在满足条件的地方(如存在高度差或间隙等)自动生成 OffMeshLink(导航链接 ),用于指示寻路代理可跨越的区域。
Navigation Area:用于选择该物体的属性。(可行/不可行/自定义区域),每个区域有不同的权值,而导航依赖于这些权值来做判断。

4.Area面板

在这里插入图片描述
上述的区域权值编辑面板。

5.Bake面板

在这里插入图片描述
Radius:定义该物体的判定半径,该值越小可行区域越大。
radius = 0.1;
在这里插入图片描述
radius = 0.5;
在这里插入图片描述
Agent Height:定义可行高度的最小值,大于等于这个值的高度才有可能是可行区域。
Max slope:最大坡度。
step Heigth:最大台阶高度。
Generate Links:自动产生网格外连接的值设置。

最下方的3个是烘焙精密度以及优化相关的选项。
Manual Voxel Size(手动体素大小):勾选后可手动设置体素大小(Voxel Size )。导航网格烘焙用体素化从几何体构建导航网格,先将场景光栅化为体素,再提取可行走表面并转化为导航网格 。体素大小决定导航网格表示场景几何体的准确程度,默认每个代理半径对应 3 个体素 ,能兼顾精确度和烘焙速度。减小体素大小可提升导航网格精度,但会使内存使用量增加、烘焙时间变长。 比如构建更准确的导航网格或针对更小代理半径烘焙时,可能需手动设置。

Voxel Size(体素大小):表示生成的导航网格表示场景几何体的精确程度数值 。不勾选 “Manual Voxel Size” 时,该值由系统按默认规则(每个代理半径对应 3 个体素 )确定;勾选后可自定义,值越小,精度越高,烘焙耗时和内存占用也越大。

Min Region Area(最小区域面积) :用于设置导航网格区域的最小表面积。烘焙时,表面积小于此指定值的非连接导航网格区域将被剔除 。比如设置为 2,小于该面积的孤立小区域不会出现在最终导航网格中 。但有时即便设置了该值,跨瓦片边界区域因算法限制,可能不会被移除 。

6.Agent面板

在这里插入图片描述
Agent面板是当该物体被挂载了Agent组件的时候才真正有用。
Radius:这里的半径区别于Bake,能通过的最小半径。
Height:一样是能通过的最小间隙,与Bake的区别就是,Bake先决定好了NavMesh的可行区,然后Agent的Height再对每个player进行个性化的定义。
Step Height,Max Slope同上。

7.Nav Mesh Agent组件

在这里插入图片描述
Steering:定义了物体的行走的属性。
Obstacle Avoidance:
Radius:定义碰撞的半径。
Height:定义了碰撞的高度。
Quality:定义了碰撞避免的质量。越高表现越好,越吃性能。
Priority:避免时的权重,越小优先级越高。
Path Fining:
从上到下:
自动寻找有无外连接。
在死路的时候是否重新寻找有无可行路径。
选择自身可行的Area。

8.Nav Mesh Obstacle组件

在这里插入图片描述
Shape:碰撞盒的形状。
Center,size:位置大小信息。
Carve:是否启用该障碍。
Move Threshold:当位置移动的distance>= x的时候更新该物体的碰撞可行区。
Time To Stationary:当物体静止x秒后被视为静态。
Carve Only Stationary:(是/否)仅在静态时候更新碰撞可行区。

9.简单使用

动态障碍脚本,使用Dotween来制作动画。也可以使用Towards,Lerp等来改变transform.position的位置实现相同的效果,不过这里用Dotween的Sequence很方便。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class dynamicObstacle : MonoBehaviour
{// Start is called before the first frame updateprivate Sequence sequence;private void Start(){Vector3 startPosi = transform.position;Vector3 targetPosi = new Vector3(transform.position.x + 5, transform.position.y, transform.position.z);sequence = DOTween.Sequence();sequence.Append(transform.DOMove(targetPosi, 5f));sequence.Append(transform.DOMove(startPosi, 5f));sequence.SetLoops(-1);}}

主物体脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class playerScript : MonoBehaviour
{// Start is called before the first frame updateprivate NavMeshAgent agent;[SerializeField] Transform destination;void Start(){agent = GetComponent<NavMeshAgent>();}// Update is called once per framevoid Update(){agent.SetDestination(destination.position);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词