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

Unity AI Navigation自动寻路

目录

  • 前言
  • 一、Unity中AI Navigation是什么?
  • 二、使用步骤
    • 1.安装AI Navigation
    • 2.创建模型和材质
    • 3.编写向目标移动的脚本
    • 4.NavMeshLink桥接组件
    • 5.NavMeshObstacle组件
    • 6.NavMeshModifler组件
  • 三、效果
  • 总结


前言

Unity是一款强大的游戏开发引擎,而人工智能(AI)导航是游戏中至关重要的一部分。通过Unity的AI Navigation系统,开发者可以轻松地为游戏中的角色实现自动导航功能。本文将介绍Unity中AI Navigation的基础内容,帮助开发者快速入门。


一、Unity中AI Navigation是什么?

Unity中的AI Navigation是一套用于游戏开发的导航系统,它使开发者能够为游戏中的角色提供智能的路径规划和导航功能。通过AI Navigation系统,游戏中的角色可以根据场景中的障碍物、地形等信息,自动计算出最佳路径,并沿着路径移动到目标位置。

二、使用步骤

1.安装AI Navigation

在这里插入图片描述

在这里插入图片描述

2.创建模型和材质

创建地面和材质

在这里插入图片描述

创建一个空物体,把Plane放到里面,然后挂载NavMeshSurface组件获取当前地图数据

在这里插入图片描述

NavMeshSurface 是 Unity 中用于生成导航网格的组件。它表示特定 NavMesh Agent 类型的可行走区域,并定义了场景中应该构建 NavMesh 的部分。

以下是 NavMeshSurface 组件的一些属性介绍:

  1. Agent Type:指定使用该 NavMeshSurfaceNavMesh Agent 类型。这对于烘焙设置和在寻路期间将 NavMesh Agent 匹配到适当的表面非常有用。
  2. Default Area:定义在构建NavMesh时生成的区域类型。
  3. Generate Links:如果启用此选项,由 NavMeshSurface 收集的对象将在烘焙过程中被视为生成链接。有关更多信息,请参阅链接生成部分。
  4. Use Geometry:选择用于烘焙的几何体。
  5. Object Collection:定义用于烘焙的 GameObject 集合。
  6. Advanced Settings:高级设置部分允许您自定义以下附加参数。
  7. NavMeshData(只读):定位存储 NavMesh 的资产文件。

点击bake开始烘焙地形

在这里插入图片描述

给Player挂上Nav Mesh Agent组件

在这里插入图片描述

NavMeshAgent 是 Unity 中用于导航的组件,用于控制角色在场景中的移动。

以下是 NavMeshAgent 组件的一些属性介绍:

  1. AgentType:代理的类型 。

  2. BaseOffset:相对垂直位移偏差。

  3. Speed:遵循路径时的最大移动速度。

  4. AngularSpeed:遵循路径时的最大转向速度(以度/秒为单位)。

  5. Acceleration:代理在遵循路径时的最大加速度,以单位/秒2为单位。

  6. StoppingDistance:距离目标位置停止的距离。

  7. AutoBraking:代理是否自动刹车以避免超过目标点

  8. Radius:代理的避让半径。

  9. Height:代理的高度,用于通过障碍物等。

  10. Priority :用于设置避让优先级。

  11. AreaMask:指定哪些 NavMesh 区域可通行。

3.编写向目标移动的脚本

代码如下(示例):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class SetDestination : MonoBehaviour
{private NavMeshAgent _agent;private Transform _target;// Start is called before the first frame updatevoid Start(){_agent = GetComponent<NavMeshAgent>();_target = GameObject.Find("Target").transform;}// Update is called once per framevoid Update(){_agent.SetDestination(_target.position);}
}

然后把脚本挂载Player上

4.NavMeshLink桥接组件

创建2个不贴合的平面,然后烘焙导航网格

在这里插入图片描述

创建一个空物体并添加NavMeshLink组件

NavMeshLink 是 Unity 中用于导航的组件,用于创建可导航的链接,连接使用 NavMesh 的不同位置。这些链接可以是从点到点,也可以跨越空隙,此时代理会使用入口边缘上最近的位置来穿越链接。您必须使用 NavMeshLink 来连接不同的 NavMesh Surface

在这里插入图片描述

  1. Start Point:链接的起始点,相对于 GameObject。使用 XYZ 坐标定义。

  2. End Point:链接的结束点,相对于 GameObject。使用 XYZ 坐标定义。

选中图中的小方块,然后移动

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.NavMeshObstacle组件

NavMeshObstacle 是 Unity 中用于导航的组件,用于描述移动障碍物,这些障碍物在导航世界中需要被 NavMesh Agents 避开(例如由物理系统控制的桶或箱子)。

以下是 NavMeshObstacle 组件的一些属性介绍:

创建一个模型,添加一个NavMeshObstacle组件

在这里插入图片描述
在这里插入图片描述

  1. Shape:指定障碍物的几何形状。可选择以下形状之一:

    • Box:选择一个立方体形状的障碍物。

      • Center:相对于变换位置的立方体中心。
      • Size:立方体的尺寸。
    • Capsule:选择一个椭圆形状的障碍物。

      • Center:相对于变换位置的胶囊中心。
      • Radius:胶囊的半径。
      • Height:胶囊的高度。
  2. Carve:启用此选项后,障碍物在静止时会在 NavMesh 中刻出一个洞。当障碍物移动时,它成为一个阻碍物。

  3. Move Threshold:设置更新移动刻出洞的阈值距离。当障碍物移动超过此距离时,Unity 将其视为移动中。

  4. Time To Stationary:指定障碍物被视为静止的等待时间(以秒为单位)。

  5. Carve Only Stationary:启用此选项后,仅当障碍物静止时才会刻出洞。

6.NavMeshModifler组件

NavMeshModifier 是 Unity 中用于导航的组件,用于在运行时调整 GameObject 的行为,影响导航网格的生成。以下是 NavMeshModifier 组件的一些属性介绍:

  1. Mode:指定是否考虑或忽略受影响的 GameObject。

    • Add or Modify Object:在构建 NavMesh 时考虑受影响的 GameObject。
    • Remove Object:对于指定的代理类型,在构建 NavMesh 时忽略受影响的对象。
  2. Affected Agents :指定 NavMeshModifier 影响的代理类型。

    • All:修改所有代理的行为。
    • None:排除所有代理的修改行为。
  3. Apply to Children:将配置应用于 GameObject 的子级层次结构。如果需要在层次结构的较低级别覆盖此组件的影响,可以添加另一个 NavMeshModifier 组件。

  4. Override Area:更改受影响的 GameObject 的区域类型。如果要更改区域类型,请选中复选框,然后在区域类型下拉菜单中选择新的类型。如果不想更改区域类型,取消选中复选框。

  5. Override Generate Links:在生成链接时,强制包括或忽略受影响的 GameObject。

  6. Generate Links:指定在生成链接时是否包括受影响的 GameObject。如果要在 NavMesh 构建过程中包括 GameObject,请选中此复选框

创建一个路线并挂载NavMeshModifler组件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、效果

在这里插入图片描述

总结

Unity的AI Navigation系统为游戏开发者提供了强大的路径规划和导航功能,使得开发者能够轻松实现游戏中角色的智能行动。通过本文的介绍,希望读者能够对Unity中AI Navigation的基础使用有所了解,并能够在自己的游戏项目中应用起来。

相关文章:

Unity AI Navigation自动寻路

目录 前言一、Unity中AI Navigation是什么&#xff1f;二、使用步骤1.安装AI Navigation2.创建模型和材质3.编写向目标移动的脚本4.NavMeshLink桥接组件5.NavMeshObstacle组件6.NavMeshModifler组件 三、效果总结 前言 Unity是一款强大的游戏开发引擎&#xff0c;而人工智能&a…...

HarmonyOS实战开发-如何实现一个简单的健康生活应用(上)

介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用&#xff0c;主要功能包括&#xff1a; 用户可以创建最多6个健康生活任务&#xff08;早起&#xff0c;喝水&#xff0c;吃苹果&#xff0c;每日微笑&#xff0c;刷牙&#xff0c;早睡&#xff09;&#xff0c;并设置任…...

React中使用antDesign框架

1.在React项目中使用Ant Design&#xff0c;首先需要安装Ant Design: npm install antd --save 2.按需引入Ant Design组件&#xff0c;以减小最终打包的大小。使用babel-plugin-import插件可以实现按需加载。首先安装插件&#xff1a; npm install babel-plugin-import --save-…...

Electron安全防护实战:应对常见安全问题及权限控制措施

Electron安全防护实战&#xff1a;应对常见安全问题及权限控制措施 引言常见安全问题及其危害提升 Electron 应用安全性的措施限制渲染进程权限防止XSS与内容注入加固应用更新流程严格管理硬件权限使用安全的第三方模块加密敏感数据存储实现进程间通信&#xff08;IPC&#xff…...

StringBuffer与StringBuilder

1.区别 (1). String : 不可变字符序列. (2). StringBuffer : 可变字符序列.线程安全&#xff0c;但效率低. (3). StringBuilder : 可变字符序列.线程不安全&#xff0c;但效率高. 既然StringBuffer与StringBuilder都是可变字符序列&#xff0c;但二者咋区分开呢&#xff1f…...

HCIP综合实验拓扑

实验要求 1.R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有I地址; 2、R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方: R2与R5之间使用ppp的CHAP认证&#xff0c;R5为主认证方; R3与R5之间使用HDLC封装; 3R1、R2、R3构建一个MGRE环境&#xf…...

nuxt学习

一、遇到的问题 1、nuxt初始化失败问题解决方案 使用npm和pnpm初始化都失败 原因&#xff1a;主机连不上DNS服务器 解决方案 Step1: 打开文件夹 Windows:路径&#xff1a;C:\Windows\System32\drivers\etc Mac: 路径&#xff1a;/etc/hosts Step2: 使用记事本方式打开 …...

VS学习建议

Visual Studio&#xff08;简称VS&#xff09;是由微软公司开发的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;支持多种编程语言&#xff0c;主要用于Windows平台上的应用程序开发。学习使用Visual Studio涉及多个方面&#xff0c;以下是一些关键的学习内容&#…...

java汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…...

【笔记】OpenHarmony设备开发:搭建开发环境(Ubuntu 20.04,VirtualBox 7.0.14)

参考&#xff1a;搭建开发环境&#xff08;HarmonyOS Device&#xff09; Note&#xff1a;Windows系统虚拟机中Ubuntu系统安装完成后&#xff0c;根据指导完成Ubuntu20.04基础环境配置&#xff08;HarmonyOS Connect 开发工具系列课&#xff09; 系统要求 Windows系统要求&…...

计算机视觉新巅峰,微软牛津联合提出MVSplat登顶3D重建

开篇&#xff1a;探索稀疏多视图图像的3D场景重建与新视角合成的挑战 3D场景重建和新视角合成是计算机视觉领域的一项基础挑战&#xff0c;尤其是当输入图像非常稀疏&#xff08;例如&#xff0c;只有两张&#xff09;时。尽管利用神经场景表示&#xff0c;例如场景表示网络&a…...

halcon图像腐蚀

1、原理 使用结构元素在图像上移动&#xff0c;只有结构元素上的所有像素点都属于图像中时&#xff0c;才保留结构元素中心点所在的像素&#xff0c;常用于分离连接的两个物体、消除噪声。 2、halcon代码 dev_open_file_dialog (read_image, default, default, Selection) r…...

neo4j使用详解(六、cypher即时时间函数语法——最全参考)

Neo4j系列导航&#xff1a; neo4j及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 6.时间函数-即时类型 表示具体的时刻的时间类型函数 6.1.date函数 年-月-日时间函数&#xff1a; yyyy-mm-dd 6.1.1.获取date da…...

Web 前端性能优化之一:性能模型及网页原理

一、RAIL 性能模型 RAIL性能模型指出了用户对不同延迟时间的感知度&#xff0c;以用户为中心的原则&#xff0c;就是要让用户满意网站或应用的性能体验。 RAIL &#xff1a;响应(Response)、动画(Animation)、空闲(Idle)、加载(Load) RAIL 性能模型 用户感知延迟的时间窗口 1…...

常用的主流好用的WEB自动化测试工具强烈推荐

在业务使用的自动化测试工具很多。有开源的&#xff0c;有商业化的&#xff0c;各有各得特色&#xff0c;各有各得优点&#xff01;下面我就介绍几个我用过的一款非常优秀的国产自动化测试工具。在现有的自动化软件当中&#xff0c;都是以元素的name、id、xpath、class、tag、l…...

分享几个非常不错嵌入式开源项目,一定不要错过

大家好&#xff0c;我是知微&#xff01; 经常有小伙伴后台私信我&#xff1a; 有没有好的开源项目推荐怎么样才能提升自己的编程能力 那么这篇文章就推荐几个还不错的开源项目&#xff0c;感兴趣的小伙伴可以学习一下&#xff01; 日志库EasyLogger https://github.com/ar…...

Golang基础-4

Go语言基础 介绍 基础 数组(array) 数组声明 元素访问与修改 数组遍历 关系运算 切片创建 多维数组 介绍 本文介绍Go语言中数组(array)操作(数组声明、元素访问与修改、数组遍历、关系运算、切片创建、多维数组)等相关知识。 基础 数组 数组是具有相同数据类型的…...

2024软件设计师备考讲义——UML(统一建模语言)

UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图&#xff08;也可称用例建模&#xff09;描述的是外部执行者&#xff08;Actor&#xff09;所理解的系统功能。用例图用于需求分析阶段&#xff0c;它的建立是系统开发者和用户反复…...

HTML——1.简介、基础、元素

一、简介 HTML&#xff08;HyperText Markup Language&#xff09;是一种用于创建网页的标记语言。它使用标记&#xff08;tag&#xff09;来描述网页的结构和内容。HTML被用于定义网页中的文本、图像、链接、多媒体以及其他元素的排列和呈现方式。 HTML文档是由一系列的HTML…...

Rust 标准库:std::env::args() 函数简介

std::env::args() 是 Rust 标准库中的一个函数&#xff0c;它属于 std::env 模块。这个函数用于获取并返回一个迭代器&#xff0c;该迭代器包含了程序运行时从命令行传入的所有参数。 当你运行一个 Rust 程序并从命令行传递参数时&#xff0c;例如&#xff1a; my_rust_progr…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...