unity学习47:寻路和导航,unity2022后版本如何使用Navmesh和bake
- 互联网
- 2025-08-27 08:51:02

目录
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.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按钮被替换为在组件上进行烘焙。具体操作如下:
选择场景中的静态物体:首先,确定场景中的静态物体(在整个游戏运行过程中不会发生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 获得点击位置 点击目标点,获得点击点,仍然使用之前的,摄像机射线 rayRay 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 可以实现智能寻路效果和按键移动的差别,按键移动可以从墙上跳下到对面去但是点击移动,摄像机射线这种方法,角色在墙上也无法移动到对面unity学习47:寻路和导航,unity2022后版本如何使用Navmesh和bake由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“unity学习47:寻路和导航,unity2022后版本如何使用Navmesh和bake”