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
组件的一些属性介绍:
- Agent Type:指定使用该
NavMeshSurface
的NavMesh Agent
类型。这对于烘焙设置和在寻路期间将NavMesh Agent
匹配到适当的表面非常有用。 - Default Area:定义在构建
NavMesh
时生成的区域类型。 - Generate Links:如果启用此选项,由
NavMeshSurface
收集的对象将在烘焙过程中被视为生成链接。有关更多信息,请参阅链接生成部分。 - Use Geometry:选择用于烘焙的几何体。
- Object Collection:定义用于烘焙的 GameObject 集合。
- Advanced Settings:高级设置部分允许您自定义以下附加参数。
- NavMeshData(只读):定位存储 NavMesh 的资产文件。
点击bake开始烘焙地形
给Player挂上Nav Mesh Agent组件
NavMeshAgent
是 Unity 中用于导航的组件,用于控制角色在场景中的移动。
以下是 NavMeshAgent
组件的一些属性介绍:
-
AgentType:代理的类型 。
-
BaseOffset:相对垂直位移偏差。
-
Speed:遵循路径时的最大移动速度。
-
AngularSpeed:遵循路径时的最大转向速度(以度/秒为单位)。
-
Acceleration:代理在遵循路径时的最大加速度,以单位/秒2为单位。
-
StoppingDistance:距离目标位置停止的距离。
-
AutoBraking:代理是否自动刹车以避免超过目标点
-
Radius:代理的避让半径。
-
Height:代理的高度,用于通过障碍物等。
-
Priority :用于设置避让优先级。
-
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
。
-
Start Point:链接的起始点,相对于 GameObject。使用 XYZ 坐标定义。
-
End Point:链接的结束点,相对于 GameObject。使用 XYZ 坐标定义。
选中图中的小方块,然后移动
5.NavMeshObstacle组件
NavMeshObstacle
是 Unity 中用于导航的组件,用于描述移动障碍物,这些障碍物在导航世界中需要被 NavMesh Agents
避开(例如由物理系统控制的桶或箱子)。
以下是 NavMeshObstacle
组件的一些属性介绍:
创建一个模型,添加一个NavMeshObstacle组件
-
Shape:指定障碍物的几何形状。可选择以下形状之一:
-
Box:选择一个立方体形状的障碍物。
- Center:相对于变换位置的立方体中心。
- Size:立方体的尺寸。
-
Capsule:选择一个椭圆形状的障碍物。
- Center:相对于变换位置的胶囊中心。
- Radius:胶囊的半径。
- Height:胶囊的高度。
-
-
Carve:启用此选项后,障碍物在静止时会在
NavMesh
中刻出一个洞。当障碍物移动时,它成为一个阻碍物。 -
Move Threshold:设置更新移动刻出洞的阈值距离。当障碍物移动超过此距离时,Unity 将其视为移动中。
-
Time To Stationary:指定障碍物被视为静止的等待时间(以秒为单位)。
-
Carve Only Stationary:启用此选项后,仅当障碍物静止时才会刻出洞。
6.NavMeshModifler组件
NavMeshModifier
是 Unity 中用于导航的组件,用于在运行时调整 GameObject 的行为,影响导航网格的生成。以下是 NavMeshModifier
组件的一些属性介绍:
-
Mode:指定是否考虑或忽略受影响的 GameObject。
- Add or Modify Object:在构建 NavMesh 时考虑受影响的 GameObject。
- Remove Object:对于指定的代理类型,在构建 NavMesh 时忽略受影响的对象。
-
Affected Agents :指定 NavMeshModifier 影响的代理类型。
- All:修改所有代理的行为。
- None:排除所有代理的修改行为。
-
Apply to Children:将配置应用于 GameObject 的子级层次结构。如果需要在层次结构的较低级别覆盖此组件的影响,可以添加另一个
NavMeshModifier
组件。 -
Override Area:更改受影响的 GameObject 的区域类型。如果要更改区域类型,请选中复选框,然后在区域类型下拉菜单中选择新的类型。如果不想更改区域类型,取消选中复选框。
-
Override Generate Links:在生成链接时,强制包括或忽略受影响的 GameObject。
-
Generate Links:指定在生成链接时是否包括受影响的 GameObject。如果要在 NavMesh 构建过程中包括 GameObject,请选中此复选框
创建一个路线并挂载NavMeshModifler组件
三、效果
总结
Unity的AI Navigation系统为游戏开发者提供了强大的路径规划和导航功能,使得开发者能够轻松实现游戏中角色的智能行动。通过本文的介绍,希望读者能够对Unity中AI Navigation的基础使用有所了解,并能够在自己的游戏项目中应用起来。
相关文章:
Unity AI Navigation自动寻路
目录 前言一、Unity中AI Navigation是什么?二、使用步骤1.安装AI Navigation2.创建模型和材质3.编写向目标移动的脚本4.NavMeshLink桥接组件5.NavMeshObstacle组件6.NavMeshModifler组件 三、效果总结 前言 Unity是一款强大的游戏开发引擎,而人工智能&a…...
HarmonyOS实战开发-如何实现一个简单的健康生活应用(上)
介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用,主要功能包括: 用户可以创建最多6个健康生活任务(早起,喝水,吃苹果,每日微笑,刷牙,早睡),并设置任…...
React中使用antDesign框架
1.在React项目中使用Ant Design,首先需要安装Ant Design: npm install antd --save 2.按需引入Ant Design组件,以减小最终打包的大小。使用babel-plugin-import插件可以实现按需加载。首先安装插件: npm install babel-plugin-import --save-…...
Electron安全防护实战:应对常见安全问题及权限控制措施
Electron安全防护实战:应对常见安全问题及权限控制措施 引言常见安全问题及其危害提升 Electron 应用安全性的措施限制渲染进程权限防止XSS与内容注入加固应用更新流程严格管理硬件权限使用安全的第三方模块加密敏感数据存储实现进程间通信(IPCÿ…...
StringBuffer与StringBuilder
1.区别 (1). String : 不可变字符序列. (2). StringBuffer : 可变字符序列.线程安全,但效率低. (3). StringBuilder : 可变字符序列.线程不安全,但效率高. 既然StringBuffer与StringBuilder都是可变字符序列,但二者咋区分开呢?…...
HCIP综合实验拓扑
实验要求 1.R5为ISP,只能进行IP地址配置,其所有地址均配为公有I地址; 2、R1和R5间使用PPP的PAP认证,R5为主认证方: R2与R5之间使用ppp的CHAP认证,R5为主认证方; R3与R5之间使用HDLC封装; 3R1、R2、R3构建一个MGRE环境…...
nuxt学习
一、遇到的问题 1、nuxt初始化失败问题解决方案 使用npm和pnpm初始化都失败 原因:主机连不上DNS服务器 解决方案 Step1: 打开文件夹 Windows:路径:C:\Windows\System32\drivers\etc Mac: 路径:/etc/hosts Step2: 使用记事本方式打开 …...
VS学习建议
Visual Studio(简称VS)是由微软公司开发的一款集成开发环境(IDE),支持多种编程语言,主要用于Windows平台上的应用程序开发。学习使用Visual Studio涉及多个方面,以下是一些关键的学习内容&#…...
java汇总区间
给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…...
【笔记】OpenHarmony设备开发:搭建开发环境(Ubuntu 20.04,VirtualBox 7.0.14)
参考:搭建开发环境(HarmonyOS Device) Note:Windows系统虚拟机中Ubuntu系统安装完成后,根据指导完成Ubuntu20.04基础环境配置(HarmonyOS Connect 开发工具系列课) 系统要求 Windows系统要求&…...
计算机视觉新巅峰,微软牛津联合提出MVSplat登顶3D重建
开篇:探索稀疏多视图图像的3D场景重建与新视角合成的挑战 3D场景重建和新视角合成是计算机视觉领域的一项基础挑战,尤其是当输入图像非常稀疏(例如,只有两张)时。尽管利用神经场景表示,例如场景表示网络&a…...
halcon图像腐蚀
1、原理 使用结构元素在图像上移动,只有结构元素上的所有像素点都属于图像中时,才保留结构元素中心点所在的像素,常用于分离连接的两个物体、消除噪声。 2、halcon代码 dev_open_file_dialog (read_image, default, default, Selection) r…...
neo4j使用详解(六、cypher即时时间函数语法——最全参考)
Neo4j系列导航: neo4j及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 6.时间函数-即时类型 表示具体的时刻的时间类型函数 6.1.date函数 年-月-日时间函数: yyyy-mm-dd 6.1.1.获取date da…...
Web 前端性能优化之一:性能模型及网页原理
一、RAIL 性能模型 RAIL性能模型指出了用户对不同延迟时间的感知度,以用户为中心的原则,就是要让用户满意网站或应用的性能体验。 RAIL :响应(Response)、动画(Animation)、空闲(Idle)、加载(Load) RAIL 性能模型 用户感知延迟的时间窗口 1…...
常用的主流好用的WEB自动化测试工具强烈推荐
在业务使用的自动化测试工具很多。有开源的,有商业化的,各有各得特色,各有各得优点!下面我就介绍几个我用过的一款非常优秀的国产自动化测试工具。在现有的自动化软件当中,都是以元素的name、id、xpath、class、tag、l…...
分享几个非常不错嵌入式开源项目,一定不要错过
大家好,我是知微! 经常有小伙伴后台私信我: 有没有好的开源项目推荐怎么样才能提升自己的编程能力 那么这篇文章就推荐几个还不错的开源项目,感兴趣的小伙伴可以学习一下! 日志库EasyLogger https://github.com/ar…...
Golang基础-4
Go语言基础 介绍 基础 数组(array) 数组声明 元素访问与修改 数组遍历 关系运算 切片创建 多维数组 介绍 本文介绍Go语言中数组(array)操作(数组声明、元素访问与修改、数组遍历、关系运算、切片创建、多维数组)等相关知识。 基础 数组 数组是具有相同数据类型的…...
2024软件设计师备考讲义——UML(统一建模语言)
UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图(也可称用例建模)描述的是外部执行者(Actor)所理解的系统功能。用例图用于需求分析阶段,它的建立是系统开发者和用户反复…...
HTML——1.简介、基础、元素
一、简介 HTML(HyperText Markup Language)是一种用于创建网页的标记语言。它使用标记(tag)来描述网页的结构和内容。HTML被用于定义网页中的文本、图像、链接、多媒体以及其他元素的排列和呈现方式。 HTML文档是由一系列的HTML…...
Rust 标准库:std::env::args() 函数简介
std::env::args() 是 Rust 标准库中的一个函数,它属于 std::env 模块。这个函数用于获取并返回一个迭代器,该迭代器包含了程序运行时从命令行传入的所有参数。 当你运行一个 Rust 程序并从命令行传递参数时,例如: my_rust_progr…...
【Blockchain】GameFi | NFT
Blockchain GameFiGameFi顶级项目TheSandbox:Decentraland:Axie Infinity: NFTNFT是如何工作的同质化和非同质化区块链协议NFT铸币 GameFi GameFi是游戏和金融的组合,它涉及区块链游戏,对玩家提供经济激励,…...
【Docker】搭建安全可控的自定义通知推送服务 - Bark
【Docker】搭建安全可控的自定义通知推送服务 - Bark 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 Bark是一款为Apple设备用户设计的开源推送服务应用,它允许开发者、程序员以及一般用户将信息快速推送到他们自己的iPhone、iPad等设备上…...
国内IP代理软件电脑版:深入解析与应用指南
随着互联网技术的快速发展,网络活动日益丰富多样,IP代理软件也因其独特的功能和优势,成为许多电脑用户不可或缺的工具。在国内,由于网络环境的复杂性和特殊性,选择一款稳定、高效的IP代理软件电脑版尤为重要。虎观代理…...
面向对象设计之开闭原则
设计模式专栏: http://t.csdnimg.cn/4Mt4u 目录 1.引言 2.如何理解“对扩展开放、对修改关闭” 3.修改代码就意味着违反开闭原则吗 4.如何做到“对扩展开放、对修改关闭” 5.如何在项目中灵活应用开闭原则 6.总结 1.引言 开闭原则(Open Closed Principle&…...
【项目技术介绍篇】若依项目代码文件结构介绍
作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是࿰…...
实现DevOps需要什么?
实现DevOps需要什么? 硬性要求:工具上的准备 上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下: 代码管理(SCM):GitHub、GitLab、BitBucket、SubV…...
Linux小程序: 手写自己的shell
注意: 本文章只是为了理解shell内部的工作原理, 所以并没有完成shell的所有工作, 只是完成了shell里的一小部分工作 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include &l…...
javaSwing租户管理系统
简介 欢迎阅读本篇博客,今天我将为大家介绍一个基于Java Swing开发的租户管理系统。该系统具有登录、注册、添加租户、查询租户信息、修改租户信息、删除租户、修改密码、退出登录等功能模块,旨在提供一个便捷的租户管理解决方案。 一、项目介绍 该租…...
cesium实现竖立的圆
cesium中的圆是平行于地面的,想实现竖起来的圆可以使用ellipsoid,设置其中一个轴的radii值为一个很小的值,比如0.00001,则这个轴上的宽度就会非常小,看起来就是一个圆面。 一、画圆ellipse,此处也把画圆的代…...
汽车电子行业知识:智能汽车电子架构
文章目录 3.智能汽车电子架构3.1.汽车电子概念及发展3.2.汽车电子架构类型3.2.1.博世汽车电子架构3.2.2.联合电子未来汽车电子架构3.2.3.安波福汽车电子架构3.2.4.丰田汽车电子架构3.2.5.华为汽车电子架构 3.智能汽车电子架构 3.1.汽车电子概念及发展 汽车电子是车体汽车电子…...
陕西做网站的公司地址/企业文化的重要性
关于C模板的链接错误问题 前几天写了一个模版,按以前的习惯,把定义写在头文件中, 把实现写在cpp文件中。结果在编译的时候没有发生错误,但在连接的时候出现了找不到xxx的错误。一时之间不知道该怎么办才好,后来上网一…...
网站html下载/网站建站方式有哪些
现在,你已可以使用 Visual Studio 将所有 .NET 应用程序升级到最新版本的 .NET!这一功能可以从 Visual Studio 扩展包中获取,它会升级你的 .NET Framework 或 .NET Core 网页和桌面应用程序。一些项目类型仍正在开发中并将在不久的未来推出&a…...
各大网站投稿邮箱/网站seo优化徐州百度网络
maven依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <versi...
湖南建设银行官网网站首页/网站制作河南
<script> 元素属性: async:异步加载 (限第三方脚本) 加载完执行 没有顺序 不推荐 在 js 中动态插入加载脚本的元素,默认加载方式为async异步加载,如果浏览器不支持异步加载,可以声明为同步加载。let script d…...
又做投资的网站吗/沈阳seo顾问
查看mysql数据库正在执行的sql show PROCESSLIST 配置执行sql packet最大值 show variables like ‘%max_allowed_packet%’; 单位为 字节 修改 set global max_allowed_packet 2*1024*1024*10; mysql表字段添加主键: alter table user add pri…...
哪些网站是用php开发的/网站产品推广
1.使用unity中的Standard Assets包中的控制器 这个资源在资源商店中搜Standard Assets就可以下载并导入,在其Characters文件夹中有第一人称和第三人称的控制器,在unity资源面板中找到其预制件拖入层次视图即可。 涉及到的人物控制的内容很全并且也有源…...