unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录
1 寻路和导航对移动的不同
1.1 基础的移动功能
1.1.1 基础移动
1.1.2 智能导航寻路
1.1.3 智能导航寻路还可以
2 如何实现这个效果?
2.1 通过地图网格的形式
2.1.1 警告信息 the static value has been deprecated的对应搜索
2.1.3 bake按钮的位置
2.2.1 unity 2022之前
2.2.1 unity 2022之后
2.3 如果遇到 window / 下面没有AI菜单的情况,解决办法
3 地图测试导航寻路准备
3.1 做一些障碍物 和 楼梯等
4 生成地图网格
4.3 可以设置 多种不同体型的 agent 数据
5 题外话:总结关于一个gameObject在游戏里有多个形象
6 用脚本实现移动时导航效果
6.1 具体内容
6.1.1 获得点击位置
6.1.2实现导航移动
6.2 脚本内容
6.3 报错处理
6.4 测试效果 OK
1 寻路和导航对移动的不同
1.1 基础的移动功能
实测有很多差别
1.1.1 基础移动
- 基础的移动可以朝向点选的地方移动
- 比如可以跳下去等等
1.1.2 智能导航寻路
- 但是导航可以让角色移动的同时,避开障碍物,也就是 智能移动/寻路
- 而且 NaviMesh 上显示非蓝色的区域,角色移动时根本不会往哪走
1.1.3 智能导航寻路还可以
- 判断路径,哪些地方是否可通过
- 可以绕着障碍物走
- 可以实现路径的不同区域的过路成本
2 如何实现这个效果?
2.1 通过地图网格的形式
- unity 2023版本以前,点击右上角的 navigation static 可以
- unity 2023版本以后,这个功能已经被弃用, the static value has been deprecated


2.1.1 警告信息 the static value has been deprecated的对应搜索
- the static value has been deprecated
这个警告信息是Unity中的一个已弃用的警告信息,它意味着你正在使用已经弃用的功能。这个信息是由于 Unity 2023 已经不再使用(Deprecated)
GameObjectUtility.FindOrCreateNavMeshSurfaceAPI来处理生成Navmesh。这个警告信息只是告诉你正在使用过时的 API,但不影响你使用 Navigation 功能。如果你想使用Navigation功能但是不想看到这个报错信息,你可以通过在代码中使用新的API来解决这个问题,具体步骤如下:
1.首先,打开“Window > AI > Navigation”面板,并创建一个新的 NavMesh Surface 组件。
2.然后,将该组件添加到场景中的一个GameObject对象上。
3.在代码中,使用以下代码片段,获取对 NavMeshSurface 组件的引用:
NavMeshSurface navMeshSurface = GetComponent<NavMeshSurface>();4.使用该组件的新 API,即:
navMeshSurface.BuildNavMesh();这样就可以解决该警告信息,并正确地使用 Navigation 功能。
需要注意的是,由于该API已经弃用了,因此无法保证该解决方案在未来版本的 Unity 中是否会继续有效。因此,如果你想保持你的代码是最新的,建议使用最新的文档和API。
2.1.2 新的navigation bake功能
在Unity 2022版本中,导航系统的Bake按钮位置发生了变化,不再直接显示在菜单中,而是通过添加组件的形式进行烘焙。
在Unity 2022版本中,导航系统的Bake按钮位置发生了变化。原来的Bake按钮被替换为在组件上进行烘焙。具体操作如下:
- 选择场景中的静态物体:首先,确定场景中的静态物体(在整个游戏运行过程中不会发生Transform变化的物体),并将其设置为静态物体(勾选static前面的复选框)。
- 添加NavMeshAgent组件:给需要导航移动的物体添加Navmesh Agent组件。
- 组件上烘焙:在组件上通过添加NavMesh组件来实现烘焙功能。具体步骤如下:
- 打开Unity编辑器,进入Window菜单,选择AI -> Navigation。
- 在Navigation界面中,选择Agent Type并设置相关参数。
- 添加NavMesh组件到需要烘焙的物体上,通过组件参数进行烘焙设置12。
通过以上步骤,可以在Unity 2022版本中实现导航系统的烘焙功能,而无需直接使用Bake按钮。这种变化旨在提高工作效率并简化导航系统的使用13。
新版本的导航系统中没有"Bake"按钮,这是因为Unity在2022.1版本中对导航系统进行了改进。在新版本中,导航系统的烘焙过程是自动进行的,无需手动触发。当您对场景进行更改或添加导航代理时,Unity会自动检测并更新导航数据。因此,您无需手动进行烘焙操作,导航系统会自动处理。这样可以提高工作效率并简化导航系统的使用。如果您在使用新版本的Unity时遇到了导航相关的问题,请提供更多详细信息,以便我们能够更好地帮助您解决问题。
2.1.3 bake按钮的位置


2.2 总结 unity2022后版本如何实现Navmesh 的地图 bake烘焙
2.2.1 unity 2022之前
- 选择要烘焙的gameObject 右上角 静态static,然后 Navigation static
- 然后,在windows下打开AI,打开Navigation , 里面有 Navigation agent 和 bake按钮
2.2.1 unity 2022之后
- 玩家角色身上,添加 NavMeshAgent 的component
- 游戏场景里只需要1个物体,比如我这的wall,选择一个NavMeshSurface.包含bake按钮,也在这儿
- 在windows下打开AI,打开Navigation ,里面只有 Navigation agent 、
- 按前面的bake按钮
2.3 如果遇到 window / 下面没有AI菜单的情况,解决办法
- 如果遇到 window / 下面没有AI菜单的情况, 是安装unity时没安装这个功能包。我就遇到了这个问题
- 需要先打开 package manager ,然后,在unity的包下搜索 navigation
- 然后安装下就有了


3 地图测试导航寻路准备
3.1 做一些障碍物 和 楼梯等
- 让地图有些区域不能直接通过,比如加墙阻隔
- 需要通过楼梯,斜坡才能通过

4 生成地图网格
4.1 地图上1个物体添加新的component : nav mesh surface
- 错误:每个需要参与寻路的 gameObject 都增加一个新component : nav mesh agent
- 正确,只需要在场景内的一个gameObject 新建增加一个新component : nav mesh surface即可。 实测不需要每个物体上都添加
- 然后有bake按钮,点击,全部进行了bake


4.2 navigation Agent设置
- 其中 agents 就是指 寻路的主体,依据这个做的寻路是否可以通过
- 也就是说,寻路导航,是为主角player (大小,身高)量身定做的。而其他单位,比如怪物,NPC等不会受到这些寻路的影响。

4.3 可以设置 多种不同体型的 agent 数据
- 多种不同体型的 agent 数据,相当于多个模板
- 具体的不同的游戏内角色,可以选择属于哪个模板agent

然后不同的导航物体,可以选择属于哪一类

4.4 navigation Agent的详细设置


angent的形状,是一个圆柱形的,和 unity编辑器里的一样
而不是看起来的形状

5 题外话:总结关于一个gameObject在游戏里有多个形象
同样1个gameObject
- mesh render 决定的外观看起来什么样,比如外观的形状
- collider决定的碰撞时,此物体的样子,比如也也时胶囊
- angent的形状 决定navigation 寻路导航的这个物体的样子,比如圆柱形
6 用脚本实现移动时导航效果
6.1 具体内容
6.1.1 获得点击位置
- 点击目标点,获得点击点,仍然使用之前的,摄像机射线 ray
Ray ray1=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray1,out hit))
{
//点击位置
Vector3 point1=hit.point;
6.1.2实现导航移动
- //获取导航代理人
- agent1=GetComponent<NavMeshAgent>();
- agent1.SetDestination(point1);
6.2 脚本内容
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class TestNavMeshAgent : MonoBehaviour
{private NavMeshAgent agent1;// Start is called before the first frame updatevoid Start(){//获取导航代理人agent1=GetComponent<NavMeshAgent>();}// Update is called once per framevoid Update(){//如果点击鼠标左键 if (Input.GetMouseButtonDown(0)){Ray ray1=Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray1,out hit)){//点击位置Vector3 point1=hit.point;//agent1.SetDestination(point1);}}}
}
6.3 报错处理
- 测试时,遇到这个,我没更新,点了X


6.4 测试效果 OK
- 可以实现智能寻路效果
- 和按键移动的差别,按键移动可以从墙上跳下到对面去
- 但是点击移动,摄像机射线这种方法,角色在墙上也无法移动到对面

相关文章:
unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...
工作-绩效笔记
文章目录 销售项目经理研发项目管理人天拆分抓手评估人天如何拆的细而且有理有据管理等 对这个一直不感兴趣,干好活就行了,但是公司肯定是出于量化的指标,而且不同角色指标不一样,记录下也科普下自己。 销售 销售额 确收、回款 …...
GPT-SoVITS更新V3 win整合包
GPT-SoVITS 是由社区开发者联合打造的开源语音生成框架,其创新性地融合了GPT语言模型与SoVITS(Singing Voice Inference and Timbre Synthesis)语音合成技术,实现了仅需5秒语音样本即可生成高保真目标音色的突破。该项目凭借其开箱…...
WPF的页面设计和实用功能实现
目录 一、TextBlock和TextBox 1. 在TextBlock中实时显示当前时间 二、ListView 1.ListView显示数据 三、ComboBox 1. ComboBox和CheckBox组合实现下拉框多选 四、Button 1. 设计Button按钮的边框为圆角,并对指针悬停时的颜色进行设置 一、TextBlock和TextBox…...
Python项目源码34:网页内容提取工具1.0(Tkinter+requests+html2text)
------★Python练手项目源码★------- Python项目32:订单销售额管理系统1.0(TkinterCSV) Python项目31:初学者也能看懂的聊天机器人1.0源码(命令行界面Re正则表达式) Python项目源码30:待办事…...
javaSE学习笔记22-线程(thread)-线程通信、线程池
线程通信 应用场景:生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,…...
vue单据打印 一维码、二维码实现
编码规则与 JavaScript 代码实现 编码规则数组:定义了 Code 128 条形码编码规则数组 BARS,其中每个数字对应一种条形码的线条组合模式。 const BARS [212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,221312,231212,112232,12…...
远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?
前言 前段时间有个朋友过来咨询关于Windows使用第三方远程软件(向日葵、Todesk等)远程连接控制macOS系统,但出现了一些奇奇怪怪的问题。 比如在连接的时候,一直卡在100%连接,对方的电脑却已经显示已经被控制的状态。…...
Spring Boot定时任务原理
Spring Boot定时任务原理 在现代应用中,定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持,通过注解驱动的方式,开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…...
C#初级教程(7)——初级期末检测
练习 1:计算圆的周长和面积 改编题目:编写一个 C# 程序,让用户输入圆的半径,然后计算并输出该圆的周长和面积,结果保留两位小数。 using System;class CircleCalculation {static void Main(){const double pi 3.14…...
原生稀疏注意力机制(NSA):硬件对齐且可原生训练的稀疏注意力机制-论文阅读
摘要 长上下文建模对于下一代语言模型至关重要,但标准注意力机制的高计算成本带来了巨大的计算挑战。稀疏注意力提供了一种在保持模型能力的同时提高效率的有前途的方向。本文提出了一种名为 NSA(原生可训练稀疏注意力机制) 的方法ÿ…...
Apache Struts RCE (CVE-2024-53677)
前言 对目前的Apache Struts RCE (CVE-2024-53677)的poc进行总结,由于只能单个ip验证,所以自己更改一下代码,实现:多线程读取url验证并保存,更改为中文解释 免责声明 请勿利用文章内的相关技术从事非法测试…...
GIS地图、轨道交通与智能驾驶UI设计:未来交通的智能化探索
随着科技的飞速发展,我们正迎来一个高度智能化的未来。在这个时代背景下,GIS(地理信息系统)、轨道交通以及智能驾驶UI设计正逐步成为推动交通行业变革的重要力量。本文将深入探讨这三者之间的内在联系及其在未来交通系统中的应用前…...
OpenResty
文章目录 OpenResty执行原理getting-started 核心模块: lua-nginx-module (ngx_lua)常用指令配置指令的执行顺序 API OpenResty 官方文档: http://openresty.org/ 官方文档完全不明所以, 除了getting-started完全不知道下一步该干啥 (都不知道ngx是什么它就开始用了), 找不到架…...
如何将公钥正确添加到服务器的 authorized_keys 文件中以实现免密码 SSH 登录
1. 下载密钥文件 2. RSA 解析 将 id_ed25519 类型的私钥转换为 RSA 类型,要将 ED25519 私钥转换为 RSA 私钥,需要重新生成一个新的 RSA 密钥对。 步骤: 生成新的 RSA 密钥对 使用 ssh-keygen 来生成一个新的 RSA 密钥对。比如,执…...
SQLMesh 系列教程7- 详解 seed 模型
SQLMesh 是一个强大的数据建模和管道管理工具,允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型,主要用于初始化和填充基础数据集。它通常包含静态数据,如参考数据和配置数据,旨在为后续的…...
Git常见命令--助力开发
git常见命令: 创建初始化仓库: git 将文件提交到暂存区 git add 文件名 将文件提交到工作区 git commit -m "注释(例如这是发行的版本1)" 文件名 查看状态 如果暂存区没有文件被提交显示: $ git status On…...
学习整理安装php的uuid扩展以及uuid调用方法
学习整理安装php的uuid扩展以及uuid调用方法 1、安装uuid依赖库2、下载并安装3、ini中添加扩展4、re2c版本报错5、uuid调用方法 1、安装uuid依赖库 yum -y install uuid uuid-devel e2fsprogs-devel libuuid-devel2、下载并安装 点我下载uuid安装包 wget http://pecl.php.ne…...
算法系列之贪心算法
在算法中,贪心算法(Greedy Algorithm)是一种常见的解决优化问题的算法。贪心算法的核心思想是:在每一步选择中都采取当前状态下最优的选择,即贪心的做出局部最优的决策,从而希望最终能够得到全局最优解。尽…...
将产品照片(form.productPhotos)转为 JSON 字符串发送给后端
文章目录 1. 前端 form.productPhotos 的当前处理a. 组件绑定b. 当前发送逻辑 2. 如何将 form.productPhotos 转为 JSON 字符串发送给后端a. 修改前端 save() 方法b. 确保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代码,我将分析如何将产品照片&a…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
