当前位置: 首页 > 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…...

Qwen2.5-7B-Instruct实战落地:医疗问诊初筛与症状结构化记录生成

Qwen2.5-7B-Instruct实战落地&#xff1a;医疗问诊初筛与症状结构化记录生成 1. 项目背景与价值 医疗问诊是医疗服务的第一道关口&#xff0c;传统的人工问诊方式存在效率低、标准化程度不高、容易遗漏关键信息等问题。特别是在基层医疗机构和线上问诊场景中&#xff0c;医生…...

不止于仿真:用HFSS优化威尔金森功分器,聊聊实际PCB加工的那些事儿

从仿真到量产&#xff1a;HFSS威尔金森功分器设计中的PCB工程实践 当我们在HFSS中看到那条完美的S参数曲线时&#xff0c;常会陷入一种技术幻觉——仿佛点击"仿真完成"按钮就意味着产品已经成功。直到第一块实物PCB测试结果摆在面前&#xff0c;回波损耗比仿真结果恶…...

MySQL 大批量数据清理时,NineData 比 GitHub 脚本更适合生产环境?

做 MySQL 大批量数据清理时&#xff0c;很多人的第一反应是去 GitHub 找脚本&#xff0c;或者自己写一段 Python、Shell、存储过程来分批删数据。这种做法很常见&#xff0c;也确实能解决一部分问题。但当场景进入生产环境&#xff0c;关注点通常会从“能不能删”转向“怎么更平…...

终极指南:如何让Mac鼠标滚轮像触控板一样丝滑滚动

终极指南&#xff1a;如何让Mac鼠标滚轮像触控板一样丝滑滚动 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for y…...

Windows Cleaner终极指南:5大核心功能彻底解决C盘爆红与系统卡顿问题

Windows Cleaner终极指南&#xff1a;5大核心功能彻底解决C盘爆红与系统卡顿问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windo…...

Davinci Configurator实战:利用Supplier Notification机制为你的UDS诊断服务加一把“安全锁”

Davinci Configurator实战&#xff1a;利用Supplier Notification机制构建UDS诊断安全防线 当ECU诊断服务暴露在复杂的车载网络环境中时&#xff0c;未经授权的访问就像未受监控的港口入口&#xff0c;随时可能引发系统性风险。传统DCM模块的标准校验逻辑往往难以应对灵活多变的…...

告别‘心跳包’困惑:用Chrome DevTools一步步调试Akamai sensor_data的生成与提交

深度解析Akamai sensor_data&#xff1a;从浏览器调试到逆向实战 如果你曾经在抓取某些网站时遇到过神秘的"sensor_data"参数&#xff0c;或者被Akamai的反爬机制挡在门外&#xff0c;那么这篇文章正是为你准备的。作为前端开发者和安全研究人员&#xff0c;我们经常…...

MAX30102数据飘、读数不准?手把手教你调试与滤波实战(STM32平台)

MAX30102数据飘、读数不准&#xff1f;手把手教你调试与滤波实战&#xff08;STM32平台&#xff09; 当你在STM32平台上使用MAX30102进行心率血氧监测时&#xff0c;是否遇到过数据波动大、读数不稳定的问题&#xff1f;这可能是硬件设计、环境干扰或软件处理等多方面因素共同作…...

鸿蒙ArkTS性能不够用?试试用Rust写个‘外挂’:手把手教你集成NAPI模块提升计算效率

鸿蒙ArkTS性能优化实战&#xff1a;用Rust打造高性能NAPI模块 ArkTS作为鸿蒙生态的主力开发语言&#xff0c;在UI构建和业务逻辑处理上表现出色&#xff0c;但遇到复杂计算任务时&#xff0c;性能瓶颈往往成为开发者的痛点。本文将带你深入探索如何通过Rust编写NAPI原生模块&am…...

Agentic AI:重新定义AI编程助手

在AI编程工具的激烈竞争中,Claude Code以其独特的"终端原生Agentic助手"定位,开辟了一条差异化的发展道路。与GitHub Copilot的IDE深度集成、Cursor的GUI友好体验不同,Claude Code选择了一条更接近Unix哲学的道路——将AI能力直接注入开发者每天都在使用的命令行环…...