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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/70280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达梦存储过程执行后 sql日志信息粗读

如何调试达梦存储过程&#xff1f;快速定位问题 dmgdb 或 manager图形工具 我觉得还可以靠sql日志和DBMS_OUTPUT包&#xff0c;不过最省事的办法放到了最后面&#xff0c;一个sql就能搞清楚了 来段演示代码 set serveroutput on drop table t1; create TABLE t1 (id int, gc…

fpga助教面试题

第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…

【分布式】Hadoop完全分布式的搭建(零基础)

Hadoop完全分布式的搭建 环境准备&#xff1a; &#xff08;1&#xff09;VMware Workstation Pro17&#xff08;其他也可&#xff09; &#xff08;2&#xff09;Centos7 &#xff08;3&#xff09;FinalShell &#xff08;一&#xff09;模型机配置 0****&#xff09;安…

GPT-Sovits:语音克隆训练-遇坑解决

前言 本来以为3050完全无法执行GPT-Sovits训练的&#xff0c;但经过实践发现其实是可以&#xff0c;并且仅花费了十数分钟便成功训练和推理验证了自己的语音模型。 官方笔记&#xff1a;GPT-SoVITS指南 语雀 项目地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS 本人…

React之旅-03 路由

做为前端开发框架&#xff0c;React 的组件化设计思想&#xff0c;使前端开发变得更加灵活高效。对于大型复杂的项目来说&#xff0c;页面之间的导航变得尤为重要。因此如何管理路由&#xff0c;是所有开发者必须考虑的问题。 React 官方推荐的路由库-React Router&#xff0c…

Word接入DeepSeek(API的作用)

1.打开”Word”&#xff0c;点击“文件”。 2.点击“选项”。 3.点击“信任中心”——“信任中心设置”。 4. 勾选”启用所有宏“&#xff0c;点击”确定“。 5.点击“自定义功能区”&#xff0c;勾选上“开发工具”&#xff0c;点击“确定”。 6.返回“文件——开发工具“下的…

SQL知识体系

SQL复习 MySQL SQL介绍 SQL SQL的全拼是什么&#xff1f; SQL全拼&#xff1a;Structured Query Language&#xff0c;也叫结构化查询语言。 SQL92和SQL99有什么区别呢&#xff1f; SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用&#xff08;&#xff…

网络安全治理模型

0x02 知识点 安全的目标是提供 可用性 Avialability机密性 confidentiality完整性 Integrity真实性 Authenticity不可否认性 Nonrepudiation 安全治理是一个提供监督、问责和合规性的框架 信息安全系统 Information Security Management System ISMS 策略&#xff0c;工作程…

Ubuntu学习备忘

1. 打开Terminal快捷键 ctrl alt t 2.Ubuntu22.04的root没有默认初始密码&#xff0c; 为root设置密码&#xff0c;下面链接的step1, How to allow GUI root login on Ubuntu 22.04 Jammy Jellyfish Linux - LinuxConfig

C#: 创建Excel文件并在Excel中写入数据库中的数据

实现思路&#xff1a; 1.检查数据是否可导出 2.弹出文件保存对话框 3.删除已存在的同名文件 4.创建 Excel 应用实例 5.导出表头 6.导出数据 7.保存 Excel 文件 8.释放 Excel 资源 9.导出成功提示 static void ExportToExcel(DataTable Data, string fileName) { // 如果表格…

DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

HTTP2.0 和 HTTP1.1 的区别

多路复用&#xff08;优化管道&#xff09;&#xff0c;基于HTTPS&#xff0c;二进制帧&#xff0c;Header压缩&#xff0c;服务器推送 多路复用&#xff1a;HTTP/2.0 在一个连接里&#xff0c;客户端和浏览器都可以同时发送多个请求和响应&#xff0c;而不用按照顺序一一对应&…

【物联网】电子电路基础知识

文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…

基于ffmpeg+openGL ES实现的视频编辑工具-解码(四)

在开发视频编辑工具时,预览功能是基石,它涵盖视频、图片以及音频播放,而视频解码则是实现视频预览及后续编辑操作的关键环节。本文聚焦于基于 FFmpeg 实现视频解码的过程,详细阐述开发中遭遇的痛点、对应的解决方式,以及核心代码的运作原理。 一、开发背景与目标 视频编…

python shlex

python shlex 核心函数 shlex.split(s, commentsFalse, posixTrue) 作用&#xff1a;将字符串按类似 Shell 的语法规则分割成参数列表&#xff0c;常用于安全处理命令行输入。参数说明&#xff1a; s&#xff08;必需&#xff09;: 待分割的字符串&#xff08;如 “ls -l ‘…

软件测试用例设计方法之正交表

一、概念 能够使用最小的测试过程集合获得最大的测试覆盖率&#xff0c;从全面试验中挑选出有代表性的点进行测试。适用于配置类软件&#xff0c;组合比较多的情况。 正交表Ln(m^k)&#xff1a; 特点&#xff1a;均匀分散、整齐可比、高效、快速、经济 n&#xff1a;正交表的…

Cursor实战:Web版背单词应用开发演示

Cursor实战&#xff1a;Web版背单词应用开发演示 需求分析自行编写需求文档借助Cursor生成需求文档 前端UI设计后端开发项目结构环境参数数据库设计安装Python依赖运行应用 前端代码修改测试前端界面 测试数据生成功能测试Bug修复 总结 在上一篇《Cursor AI编程助手不完全指南》…

DeepSeek与ChatGPT:会取代搜索引擎和人工客服的人工智能革命

云边有个稻草人-CSDN博客 在众多创新技术中&#xff0c;DeepSeek和ChatGPT无疑是最为引人注目的。它们通过强大的搜索和对话生成能力&#xff0c;能够改变我们与计算机交互的方式&#xff0c;帮助我们高效地获取信息&#xff0c;增强智能服务。本文将深入探讨这两项技术如何结合…

JavaScript中判断元素是否在可视区域内

JavaScript中判断元素是否在可视区域内 1.有什么应用2.方法1-----使用offsetTop、scrollTop3.方法2-----getBoundingClientRect4.方法3-----Intersection Observer 1.有什么应用 懒加载列表的无限滚动计算广告元素的曝光情况 2.方法1-----使用offsetTop、scrollTop offsetTo…

PyTorch与TensorFlow的对比:哪个框架更适合你的项目?

在机器学习和深度学习领域&#xff0c;PyTorch 和 TensorFlow 是最流行的两个框架。它们各有特点&#xff0c;适用于不同的开发需求和场景。本文将详细对比这两个框架&#xff0c;帮助你根据项目需求选择最合适的工具。 一、概述 PyTorch 和 TensorFlow 都是深度学习框架&…