Unity之3D物理导航系统

一 介绍

Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以制作敌人AI,让它可以通过NavMesh绕开障碍追击我方单位。甚至可以在NavMesh中设置传送门,跳跃的起点落点,让这些效果也参与寻路的计算,成功计算出导航的捷径

二  创建3D项目

2.1 新建核心3D模板

2.2 新建Plane当作地面

2.3 新建立方体当角色

2.4  开启物理导航组件,窗口->包管理器->unity注册表

2.5 给角色添加网格导航,Nav Mesh Agent选项

 

2.6 把地面组件勾选静态

2.7 找到导航系统,烘培地面Window-->AI-->Navigation

 

2.8 编写脚本,新建C#脚本文件

2.9 拖动挂载到角色上面,双击打开VS编辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class NewBehaviourScript : MonoBehaviour
{private NavMeshAgent agent;void Start(){agent = GetComponent<NavMeshAgent>();}RaycastHit hit;//碰撞体// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out hit)){agent.SetDestination(hit.point);}}}
}

2.10 保存,返回Unity运行,这个时候就能点击鼠标,物体自动移动到鼠标位置

三 导航系统参数介绍

3.1 Unity 3D 导航系统由 1个Navigation总控制面板 和 3个组件 组成,该系统是由 A*算法 延伸扩展实现的,由4部分组成,分别是 Agents,Areas,Bake,Object

3.2 常用的导航组件是自动寻路组件,障碍物组件,跳跃组件,如下图

3.3 Agents面板,导航参数设置

  • Name:设置烘焙 Agents 的名字。
  • Radius:烘焙的半径,也就是对象烘焙的半径。这个值影响对象能通过的路径的大小,值越小,能行走的路径越大,边缘区域越小。
  • Height:具有代表性的对象的高度,可以通过的最低的空间高度。值越小,能通过的最小高度越小。
  • Step Height:梯子的高度。需要根据模型阶梯的高度设置。

Max Slope:烘焙的最大角度,即坡度。

3.4 Areas面板,层设置,该面板可以设置在自动寻路时,对象可以通过那些层。 这里输入的名称会在 Object 面板的 Navigation Area 下显示

3.5 Bake面板(烘焙导航网格

  • Agent Radius:具有代表性的对象的半径,半径越小生成的网格面积越大。
  • Agent Height:具有代表性的对象的高度。
  • Max Slope:斜坡的坡度。
  • Step Height:台阶的高度。
  • Drop Height:允许最大的下落距离。
  • Jump Distance:允许最大的跳跃距离。
  • Min Region Area:网格面积小于该值则不生成导航网格。
  • Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。

3.6 Object面板,对象

在该面板中可以选择,设置要参与导航网格烘焙的对象,可以设置对象是可以被自动寻路的,如路面。也可以设置对象是不可以被自动寻路的(即不可行走),如湖面

  • Generate OffMeshLinks:设置地面可跳跃。
  • Navigation Area:设置对象以特定的路线寻路。

四 各导航组件属性介绍

4.1 Nav Mesh Agent,自动寻路组件

  • Agent Type:寻路类型,可以在 Navigation 总控制面板中设置类型。
  • Base Offset:偏移值。值越大越容易寻路,但是目标会偏移得越远。
  • Speed:对象自动寻路的速度。
  • Angular Speed:对象自动寻路的转弯速度。
  • Acceleration:加速度。
  • Stopping Distance:对象停下的距离。如果值设置为0,则在距离目标点为0处停下
  • Auto Braking:是否自动停下。
  • Radius:对象躲避障碍物的半径。大于这个半径无法躲避障碍物。
  • Height:对象躲避障碍物的等级。等级越高,躲避障碍物越准确。
  • Priority:优先级。值越大,障碍物躲避越优先。
  • Auto Traverse Off Mesh Link:自动跳跃链接。
  • Auto Repath:自动复制路径。
  • Area Mask:能通过的Mask层,可以配合 Navigation 组件中的 Areas 使用。

4.2 Nav Mesh Obstacle,障碍物组件

  • Shape:障碍物的形状。
  • Center:障碍物的中心点坐标。
  • Size:障碍物的大小。
  • Carve:障碍物的网格。  

4.3 Off Mesh Link,跳跃组件

  • Start:跳跃的开始点。
  • End:跳跃的结束点。
  • Cost Override:是否计算路径开销,即是否将寻路计入寻路距离。
  • Bi Directional:开始点和结束点是否可以互跳。
  • Activated:是否激活。
  • Auto Update Position:自动更新位置坐标。
  • Navigation Area:可以寻路的层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 JVM 之——字节码指令与执行引擎

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 类文件结构 Write Once&#xff0c;Run Anywhere 对于 C 语言从程序到运行需要经过编译的过程&#xff0c;只有经历了编译后&#xff0c;我们所编写的代码才能够翻译为机器可以直接运行的二进制代码&#x…

【web开发】4、JavaScript与jQuery

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、JavaScript与jQuery二、JavaScript常用的基本功能1.插入位置2.注释3.变量4.数组5.滚动字符 三、jQuery常用的基本功能1.引入jQuery2.寻找标签3.val、text、appe…

笔记 | 排序算法实现(Python)

排序算法 一、选择排序二、合并/归并排序三、快速排序四、计数排序 排序类型时间复杂度选择排序(Selection Sort) O ( n 2 ) O(n^{2} ) O(n2)合并/归并排序&#xff08;Merge Sort&#xff09; O ( n log ⁡ n ) O(n\log n ) O(nlogn)快速排序(Quick Sort)平均情况 O ( n log ⁡…

帧动画实现

背景&#xff1a; pag实现痛点 文档&#xff1a;libpag参考文档 1.打包依赖的类型缺失问题 2.pagview初始化文件过大,影响小程序打包 3.兼容性较差关键帧动画实现痛点: 当关键帧变化过多的时候&#xff0c;无法准确分辨出需要写出多少个关键帧&#xff0c;以及各个关键帧的具…

视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?

视频监控/视频汇聚/安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频云存储EasyCVR平台能在复…

身份识别与鉴权技术调研方案

对称加密算法 对称加密方式又称为私钥加密方式&#xff0c;该方式的加密和解密过程使用同一个密钥&#xff0c;因此该密钥又称为共享密钥。如图2.2所示&#xff0c;在对称加密方式中&#xff0c;发送方使用对称加密算法和共享密钥处理原始数据&#xff0c;得到一个加密后的密文…

IDEA新建的Moudle失效显示为灰色

现象&#xff1a;IDEA新建的Moudle失效显示为灰色&#xff01;&#xff01;&#xff01; 解决方案&#xff1a; 1. 右键点击父模块&#xff0c;选择Open Moudle Settings&#xff1a; 2. 点击加号&#xff0c;选择Import Moudle - 导入模块&#xff1a; 3. 找到对应模块的po…

0016Java程序设计-springboot幼儿园管理系统

摘 要目 录系统设计开发环境 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于幼儿园管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了幼儿园管理系统&a…

Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果

一、先来看下实现的效果 实现上面的效果需要解决俩个问题 当列表进行向下滑动到顶部的时候&#xff0c;继续滑动可以让弹窗向下收起来弹出上下拖动的时候&#xff0c;视图内容跟着上下移动、缩放大小 二、实现弹窗上下滑动的时候&#xff0c;动态改变内容区的位置和大小 通过…

HD系列边缘网关,助力工商业储能发展!

HD系列边缘网关具备低功耗、高性能、接口丰富等特点&#xff0c;可以实现如通信规约转换、远程调度、智能监测、通信管理等多种应用&#xff0c;适用于储能系统的能源管理系统。 1.1硬件接口 该产品板载瑞芯微 RK3568 处理器&#xff0c;可选配2G16G/432 等配置。机壳采用标准 …

sql:SQL优化知识点记录(十四)

&#xff08;1&#xff09;索引失效行锁变表锁 建立2个索引 索引是失效后&#xff0c;系统性能会变查&#xff0c;如果涉及到锁的话&#xff0c;行锁会变表锁 有一个问题&#xff0c;当session1用b字段做查询条件因为是varchar类型&#xff0c;需要加双引号&#xff0c;但是没…

GO语言网络编程(并发编程)并发介绍,Goroutine

GO语言网络编程&#xff08;并发编程&#xff09;并发介绍&#xff0c;Goroutine 1、并发介绍 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更…

sqlserver 各种集合、区间、 时间轴(持更)

1.所有有交集的区间 场景&#xff1a;在事件表里查找某年员工的岗位系数&#xff0c;并计算其加权平均数。case1&#xff1a;该员工是老员工&#xff0c;从2020年一直到2049年。case2&#xff1a;该员工是老员工&#xff0c;但是今年离职。case3&#xff1a;该员工是今年的新员…

线程池|单例模式|STL、智能指针线程安全|读者写者问题

线程池 线程池的逻辑思想&#xff1a; 每当我们处理一个任务就要创建一个线程&#xff0c;创建线程的开销是很大的。因此我们可以预先创建一批线程&#xff0c;任务队列里没有任务的时候&#xff0c;每个线程都休眠&#xff0c;当队里中有任务的时候&#xff0c;就可以唤醒线程…

YOLOV7改进-针对小目标的NWD(损失函数)

link 1、复制这些 2、utils-loss&#xff0c;这里加 3、把这几行复制到utiils的loss.py 4、先对CoputerLoss类做修改 5、把那一行替换成这个 6、修改 7、iou_ration是超参&#xff0c;可以调&#xff0c;如果小目标比较多的话&#xff0c;这个值可以低一些&#xff0c;…

入门人工智能 —— 学习 python 使用 IDE :vscode 完成编程 (2)

入门人工智能 —— 学习 python 使用 IDE &#xff1a;vscode 完成编程 &#xff08;2&#xff09; 安装和配置 VSCode创建和运行 Python 代码使用 VSCode 的调试功能 在上一篇文章中&#xff0c;介绍了如何入门人工智能编程&#xff0c;并开始了学习 Python 编程语言的基础知识…

英诺森 “供应链智能数据平台”荣获“科技进步奖”

近日&#xff0c;2023年中国物流与采购联合会科学技术奖正式公布&#xff0c;该奖项经国家科技部批准&#xff0c;在国家科学技术奖励工作办公室登记备案&#xff0c;是我国物流行业最具影响力的奖项之一。 英诺森联合客户申报的科技项目“英诺森供应链智能数据平台”&#xf…

1.1 计算机网络在信息时代中的作用

思维导图&#xff1a; 正文&#xff1a; 我的理解&#xff1a; 这段话是一本书或课程的第一章简介&#xff0c;它的目的是为读者或学生提供一个关于计算机网络基础知识的框架或大纲。 首先&#xff0c;它强调了这章是整本书的一个概览&#xff0c;会先介绍计算机网络在信息时…

Python 操作 Excel

之前看过一篇文章&#xff0c;说一个工作多年的老员工&#xff0c;处理数据时只会用复制粘贴到 Excel &#xff0c;天天加班工作还完不成&#xff0c;后来公司就招了一个会 Python 的新人&#xff0c;结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据…

C# WPF 自己写的一个模拟病毒传播的程序,有可视化

源代码: https://github.com/t39q/VirusSpread 主要代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace VirusSpread.Bu…