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

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 bake功能

2.1.3 bake按钮的位置

2.2 总结 unity2022后版本如何实现Navmesh 的地图 bake烘焙

2.2.1 unity 2022之前

2.2.1 unity 2022之后

2.3 如果遇到 window / 下面没有AI菜单的情况,解决办法

3 地图测试导航寻路准备

3.1 做一些障碍物 和 楼梯等

4 生成地图网格

4.1 地图上1个物体添加新的component : nav mesh surface

4.2 navigation  Agent设置

4.3 可以设置 多种不同体型的 agent 数据

4.4 navigation  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.FindOrCreateNavMeshSurface API来处理生成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按钮被替换为在组件上进行烘焙。具体操作如下:

  1. 选择场景中的静态物体‌:首先,确定场景中的静态物体(在整个游戏运行过程中不会发生Transform变化的物体),并将其设置为静态物体(勾选static前面的复选框)。
  2. 添加NavMeshAgent组件‌:给需要导航移动的物体添加Navmesh Agent组件。
  3. 组件上烘焙‌:在组件上通过添加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 如何实现这个效果&#xff1f; 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...

工作-绩效笔记

文章目录 销售项目经理研发项目管理人天拆分抓手评估人天如何拆的细而且有理有据管理等 对这个一直不感兴趣&#xff0c;干好活就行了&#xff0c;但是公司肯定是出于量化的指标&#xff0c;而且不同角色指标不一样&#xff0c;记录下也科普下自己。 销售 销售额 确收、回款 …...

GPT-SoVITS更新V3 win整合包

GPT-SoVITS 是由社区开发者联合打造的开源语音生成框架&#xff0c;其创新性地融合了GPT语言模型与SoVITS&#xff08;Singing Voice Inference and Timbre Synthesis&#xff09;语音合成技术&#xff0c;实现了仅需5秒语音样本即可生成高保真目标音色的突破。该项目凭借其开箱…...

WPF的页面设计和实用功能实现

目录 一、TextBlock和TextBox 1. 在TextBlock中实时显示当前时间 二、ListView 1.ListView显示数据 三、ComboBox 1. ComboBox和CheckBox组合实现下拉框多选 四、Button 1. 设计Button按钮的边框为圆角&#xff0c;并对指针悬停时的颜色进行设置 一、TextBlock和TextBox…...

Python项目源码34:网页内容提取工具1.0(Tkinter+requests+html2text)

------★Python练手项目源码★------- Python项目32&#xff1a;订单销售额管理系统1.0&#xff08;TkinterCSV&#xff09; Python项目31&#xff1a;初学者也能看懂的聊天机器人1.0源码&#xff08;命令行界面Re正则表达式&#xff09; Python项目源码30&#xff1a;待办事…...

javaSE学习笔记22-线程(thread)-线程通信、线程池

线程通信 应用场景&#xff1a;生产者和消费者问题 假设仓库中只能存放一件产品&#xff0c;生产者将生产出来的产品放入仓库&#xff0c;消费者将仓库中产品取走消费 如果仓库中没有产品&#xff0c;则生产者将产品放入仓库&#xff0c;否则停止生产并等待&#xff0c…...

vue单据打印 一维码、二维码实现

编码规则与 JavaScript 代码实现 编码规则数组&#xff1a;定义了 Code 128 条形码编码规则数组 BARS&#xff0c;其中每个数字对应一种条形码的线条组合模式。 const BARS [212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,221312,231212,112232,12…...

远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?

前言 前段时间有个朋友过来咨询关于Windows使用第三方远程软件&#xff08;向日葵、Todesk等&#xff09;远程连接控制macOS系统&#xff0c;但出现了一些奇奇怪怪的问题。 比如在连接的时候&#xff0c;一直卡在100%连接&#xff0c;对方的电脑却已经显示已经被控制的状态。…...

Spring Boot定时任务原理

Spring Boot定时任务原理 在现代应用中&#xff0c;定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持&#xff0c;通过注解驱动的方式&#xff0c;开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…...

C#初级教程(7)——初级期末检测

练习 1&#xff1a;计算圆的周长和面积 改编题目&#xff1a;编写一个 C# 程序&#xff0c;让用户输入圆的半径&#xff0c;然后计算并输出该圆的周长和面积&#xff0c;结果保留两位小数。 using System;class CircleCalculation {static void Main(){const double pi 3.14…...

原生稀疏注意力机制(NSA):硬件对齐且可原生训练的稀疏注意力机制-论文阅读

摘要 长上下文建模对于下一代语言模型至关重要&#xff0c;但标准注意力机制的高计算成本带来了巨大的计算挑战。稀疏注意力提供了一种在保持模型能力的同时提高效率的有前途的方向。本文提出了一种名为 NSA&#xff08;原生可训练稀疏注意力机制&#xff09; 的方法&#xff…...

Apache Struts RCE (CVE-2024-53677)

前言 对目前的Apache Struts RCE (CVE-2024-53677)的poc进行总结&#xff0c;由于只能单个ip验证&#xff0c;所以自己更改一下代码&#xff0c;实现&#xff1a;多线程读取url验证并保存&#xff0c;更改为中文解释 免责声明 请勿利用文章内的相关技术从事非法测试&#xf…...

GIS地图、轨道交通与智能驾驶UI设计:未来交通的智能化探索

随着科技的飞速发展&#xff0c;我们正迎来一个高度智能化的未来。在这个时代背景下&#xff0c;GIS&#xff08;地理信息系统&#xff09;、轨道交通以及智能驾驶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 类型&#xff0c;要将 ED25519 私钥转换为 RSA 私钥&#xff0c;需要重新生成一个新的 RSA 密钥对。 步骤&#xff1a; 生成新的 RSA 密钥对 使用 ssh-keygen 来生成一个新的 RSA 密钥对。比如&#xff0c;执…...

SQLMesh 系列教程7- 详解 seed 模型

SQLMesh 是一个强大的数据建模和管道管理工具&#xff0c;允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型&#xff0c;主要用于初始化和填充基础数据集。它通常包含静态数据&#xff0c;如参考数据和配置数据&#xff0c;旨在为后续的…...

Git常见命令--助力开发

git常见命令&#xff1a; 创建初始化仓库&#xff1a; git 将文件提交到暂存区 git add 文件名 将文件提交到工作区 git commit -m "注释&#xff08;例如这是发行的版本1&#xff09;" 文件名 查看状态 如果暂存区没有文件被提交显示&#xff1a; $ 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…...

算法系列之贪心算法

在算法中&#xff0c;贪心算法&#xff08;Greedy Algorithm&#xff09;是一种常见的解决优化问题的算法。贪心算法的核心思想是&#xff1a;在每一步选择中都采取当前状态下最优的选择&#xff0c;即贪心的做出局部最优的决策&#xff0c;从而希望最终能够得到全局最优解。尽…...

将产品照片(form.productPhotos)转为 JSON 字符串发送给后端

文章目录 1. 前端 form.productPhotos 的当前处理a. 组件绑定b. 当前发送逻辑 2. 如何将 form.productPhotos 转为 JSON 字符串发送给后端a. 修改前端 save() 方法b. 确保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代码&#xff0c;我将分析如何将产品照片&a…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

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

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

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...