unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake

news2025/4/12 17:10:59

目录

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 update
    void Start()
    {
        //获取导航代理人
        agent1=GetComponent<NavMeshAgent>();
    }

    // Update is called once per frame
    void 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.coloradmin.cn/o/2301476.html

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

相关文章

跟着李沐老师学习深度学习(十二)

循环神经网络 序列模型 序列数据 实际中很多数据是有时序结构的 比如&#xff1a;电影的评价随时间变化而变化 拿奖后评分上升&#xff0c;直到奖项被忘记看了很多好电影后&#xff0c;人们的期望变高季节性:贺岁片、暑期档导演、演员的负面报道导致评分变低 核心思想&#…

深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…

STM32物联网终端实战:从传感器到云端的低功耗设计

STM32物联网终端实战&#xff1a;从传感器到云端的低功耗设计 一、项目背景与挑战分析 1.1 物联网终端典型需求 &#xff08;示意图说明&#xff1a;传感器数据采集 → 本地处理 → 无线传输 → 云端存储&#xff09; 在工业物联网场景中&#xff0c;终端设备需满足以下核心需…

[实现Rpc] 客户端划分 | 框架设计 | common类的实现

目录 3. 客户端模块划分 3.1 Network模块 3.2 Protocol模块 3.3 Dispatcher模块 3.4 Requestor模块 3.5 RpcCaller模块 3.6 Publish-Subscribe模块 3.7 Registry-Discovery模块 3.8 Client模块 4. 框架设计 4.1 抽象层 4.2 具象层 4.3 业务层 ⭕4.4 整体设计框架…

【SFRA】笔记

GK_SFRA_INJECT(x) SFRA小信号注入函数,向控制环路注入一个小信号。如下图所示,当前程序,小信号注入是在固定占空比的基础叠加小信号,得到新的占空比,使用该占空比控制环路。 1.2 GK_SFRA_COLLECT(x, y) SFRA数据收集函数,将小信号注入环路后,该函数收集环路的数据,以…

基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)

基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频&#xff0c;带爬虫 配套论文1w5字 可定制到某个省份&#xff0c;加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频&#xff0c;加20 旅游数据分析推荐系统采用了Python语…

国自然青年基金|针对罕见神经上皮肿瘤的小样本影像深度数据挖掘关键技术研究|基金申请·25-02-15

小罗碎碎念 今天和大家分享一个国自然青年基金项目&#xff0c;执行年限为2021.01&#xff5e;2023.12&#xff0c;直接费用为24万元。 该项目聚焦罕见神经上皮肿瘤小样本影像深度数据挖掘技术&#xff0c;致力于攻克小样本数据和临床经验缺乏带来的难题。项目围绕影像规范化、…

Linux 网络安全技巧

网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linux的源码是开放的&#xff0c;有成千上万的志愿者会立刻发现并修补它。本文旨在介绍用来增强你的…

Windows桌面系统管理7:国产操作系统与Linux操作系统

Windows桌面系统管理0&#xff1a;总目录-CSDN博客 Windows桌面系统管理1&#xff1a;计算机硬件组成及组装-CSDN博客 Windows桌面系统管理2&#xff1a;VMware Workstation使用和管理-CSDN博客 Windows桌面系统管理3&#xff1a;Windows 10操作系统部署与使用-CSDN博客 Wi…

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…

解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025

2025 年 3 月 11-13 日&#xff0c;全球规模最大的嵌入式展览会——Embedded World 2025 将在德国纽伦堡盛大开幕。作为物联网和嵌入式技术领域的领先企业&#xff0c;乐鑫信息科技 (688018.SH) 将展示在 AI LLM、HMI、双频 Wi-Fi 6、低功耗 MCU 和 Matter 等领域的最新技术及解…

LlamaFactory可视化模型微调-Deepseek模型微调+CUDA Toolkit+cuDNN安装

LlamaFactory https://llamafactory.readthedocs.io/zh-cn/latest/ 安装 必须保证版本匹配&#xff0c;否则到训练时&#xff0c;找不到gpu cuda。 否则需要重装。下面图片仅供参考。因为cuda12.8装了没法用&#xff0c;重新搞12.6 cudacudnnpytorch12.69.612.6最新&#xf…

【GPT】从GPT1到GPT3

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 从GPT1 到GPT3 1. GPT1 论文&#xff1a; https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/lan…

openGauss 3.0 数据库在线实训课程18:学习视图管理

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见&#xff1a;openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss视图的管理&#xff1a;创建视图、删除视图、查询视图的信息、修改视图的信息。 课程作业 1.创建表&#xff0c;创建普通视图…

基于flask+vue的租房信息可视化系统

✔️本项目利用 python 网络爬虫抓取某租房网站的租房信息&#xff0c;完成数据清洗和结构化&#xff0c;存储到数据库中&#xff0c;搭建web系统对各个市区的租金、房源信息进行展示&#xff0c;根据各种条件对租金进行预测。 1、数据概览 ​ 将爬取到的数据进行展示&#xff…

手写简易RPC(实践版)

首先了解rpc rpc-远程过程调用&#xff0c;openFeign&#xff0c;Dubbo都可以算作rpc&#xff0c;以微服务来具体说明&#xff0c;就是在本地不需要去发送请求&#xff0c;通过rpc框架&#xff0c;像调用本地方法一样调用其他服务的方法&#xff0c;本质上还是要经过网络&…

mysql学习笔记-多版本并发控制

1、什么是ReadView 在 MVCC机制中&#xff0c;多个事务对同一个行记录进行更新会产生多个历史快照&#xff0c;这些历史快照保存在 Undo Log里。如果一个事务想要查询这个行记录&#xff0c;需要读取哪个版本的行记录呢?这时就需要用到 ReadView 了&#xff0c;它帮我们解决了…

算法日记20:SC72最小生成树(prim朴素算法)

一、题目&#xff1a; 二、题解 2.1&#xff1a;朴素prim的步骤解析 O ( n 2 ) O(n^2) O(n2)(n<1e3) 0、假设&#xff0c;我们现在有这样一个有权图 1、我们随便找一个点&#xff0c;作为起点开始构建最小生成树(一般是1号)&#xff0c;并且存入intree[]状态数组中&#xf…

Redis7——基础篇(五)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09;Redis&#xff08;三&#xff09;Redis&#x…

从零搭建微服务项目Base(第7章——微服务网关模块基础实现)

前言&#xff1a; 在前面6章的学习中已经完成了服务间的调用实现&#xff0c;即各微服务通过nacos或eureka服务器完成服务的注册&#xff0c;并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时&#xff0c;通过feign定义接口&#xff0c;并通过注解配置服务名…