当前位置: 首页 > news >正文

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);}
}

相关文章:

  • keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?
  • Chat2DB创始人姬朋飞:AI在 text2sql应用领域的实践
  • leetcode57.插入区间
  • 力扣-hot100(无重复字符的最长子串)
  • QML FileIO 组件
  • Qt项目实现对西门子PLC的读写操作(snap7)——C++
  • 关于大型语言模型的“生物学”
  • 算法题(128):费解的开关
  • 从裸仓库到GitLab全解析
  • 【愚公系列】《Python网络爬虫从入门到精通》056-Scrapy_Redis分布式爬虫(Scrapy-Redis 模块)
  • 不确定与非单调推理的可信度方法
  • REST 架构详解:从概念到应用的全面剖析
  • 多人五子棋联机对战平台 测试报告
  • AI文生图工具推荐
  • 计算机网络期中复习笔记(自用)
  • 8、表单控制:预言水晶球——React 19 复杂表单处理
  • tigase源码学习杂记-AbstractMessageReceiver
  • 二级评论列表-Java实现
  • PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(二)
  • 实战设计模式之备忘录模式
  • 用户称被冒用身份证异地办卡申请注销遭拒,澎湃介入后邯郸联通着手办理剥离
  • 杨小伟被查,国家广播电视总局党组:坚决拥护党中央决定
  • 伊守亮回国加盟川大,长期致力于化工能源环境前沿领域研究
  • G20召开发展工作组第二次会议,中方就美“对等关税”阐明立场
  • 履新正部级的李成钢,现已担任商务部党组副书记
  • 应急部:一季度全国各类生产安全事故总量同比下降29.5%