草庐IT

Unity3D导航系统

su_make 2023-03-28 原文


Unity3D导航系统

简介

Unity3D自带导航系统,将寻路的代码封装起来,集成了Navigation导航系统。
Navigation总控制面板由Agent(代理/导航参数设置)、Areas(区域)、Bake(烘培)和Object(对象)4部分组成。

导航系统介绍

Unity3D导航系统由三个组件和一个Navigation总控制面板组成,该系统也是由A*算法拓展实现的。
Navigation是一种用于实现动态对象自动寻路的技术,它将游戏场景中复杂的关系简化为带有一定信息的网格,并基于这些网格经过一系列相应的计算实现自动寻路

Navigation总控制面板由4部分组成,分别为Agent、Areas、Bake和Object,下面具体介绍一下。

  1. Agents(导航参数设置)面板
  • Name(名称):设置烘培Agents的名字
  • Radius(半径):烘培的半径,也就是对象烘培的半径。对象能通过的路径大小,值越小,能走的路径越大,边缘区域越小。
  • Height(高度):具有代表性的对象的高度,可以通过的最低的空间高度。值越小,能通过的高度就越小。
  • Step Height(步高):梯子的高度,一般根据模型梯子的高度设置。
  • Max Slope(最大坡度):烘培的最大角度,坡度。
  1. Areas(区域)面板

    该面板可以设置在自动寻路时,对象可以通过哪些区域
  2. Bake(烘培导航网格)面板
  • Agent Radius(代理半径):具有代表性的对象的半径,半径越小生成的网格面积越大。
  • Agent Height(代理高度):具有代表性的对象的高度。
  • Max Slope(最大坡度):斜坡的坡度。
  • Step Height(步高):台阶的高度。
  • Drop Height(掉落高度):允许最大的下落距离。
  • Jump Distance:允许最大的跳跃距离。
  • Min Region Area(最小区域面积):网格面积小于该值则不生成导航网格。
  • Height Mesh(高度网格):勾选后会保存高度信息,同时会消耗一些性能和存储空间。
  1. Object(对象)面板

    在该面板中可以选择、设置要参与导航网格烘培的对象、可以设置对象是可以被自动寻路的,如路面;也可以设置对象是不可以被自动寻路的(即不能走),如湖面。
  1. Nav Mesh Agent(自动寻路组件)
  • Agent Type(代理类型):寻路类型
  • Base Offset(基准偏移):偏移值。值越大越容易寻路,但目标会偏离得月圆
  • Speed(速度):对象自动寻路的速度
  • Angular Speed(角速度):对象自动寻路的拐弯速度
  • Acceleration(加速):加速度
  • Stopping Distance(停止距离):对象停下的距离。如果值设置为0,则在距离目标点为0处停下
  • Auto Braking(自动刹车):是否自动停下
  • Radius(半径):对象躲避障碍物的半径。大于这个半径无法躲避障碍物
  • Height(高度):对象躲避障碍物的高度。大于这个高度无法躲避障碍物
  • Quality(质量):躲避障碍物的等级,等级越高,躲障碍物越准确
  • Priority(优先级):优先级。值越大,障碍物躲避越优先
  • Auto Traverse Off Mesh Link(自动通过分离网格链接):自动跳跃链接
  • Auto Repath(自动重新寻路):自动复制路径
  • Area Mask(区域遮罩):能通过的Mask层,可以配合Navigation组件中的Areas使用。
  1. Nav Mesh Obstacle(障碍物组件)
  • Shape(形状):障碍物的形状
  • Center(中心):障碍物的中心点坐标
  • Size(大小):障碍物的大小
  • Carve(切割):障碍物的网格
  1. Off Mesh Link(跳跃组件)
  • Start(起始):跳跃的开始点
  • End(结束):跳跃的结束点
  • Cost Override(成本覆盖):是否计算路径开销,即使否将寻路计入寻路距离
  • Bi Directional(双向):开始点和结束点是否可以互跳
  • Activated(已激活):是否激活
  • Auto Update Position(自动更新位置):自动更新位置坐标
  • Navigation Area(导航区域):可以寻路的层

参考文献

【1】张尧.Unity3D从入门到实战.中国水利水电出版社,2022(6):95-98

实例

https://www.cnblogs.com/su-make/articles/Unity-Navigation-Example.html

有关Unity3D导航系统的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  3. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  4. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  5. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  6. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  7. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  8. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

随机推荐