详解Unity中的Nav Mesh|导航寻路系统 (一)

这篇具有很好参考价值的文章主要介绍了详解Unity中的Nav Mesh|导航寻路系统 (一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在类RTS、RPG游戏中,都会提供自动寻路功能,当玩家下达指令后,NPC就会自动计算到达目标的路径,实现这种功能的方式有很多种,其中Unity本身也自带了一种导航寻路系统,该系统会将游戏场景中复杂的对象烘焙为网格信息,通过网格来计算NPC抵达目标的最短路径,该系统还支持动态寻路。接下来就详细讲讲NavMesh系统。

本系列提要

Unity导航系统专题博客共分成三篇来讲解: 【本篇为第一篇】

  • 第一篇(点击直达):如何快速上手使用
  • 第二篇(点击直达):详解Nav Mesh Agent参数,详解如何添加动态障碍(Nav Mesh Obstacle),详解如何创建外链接(Off Mesh Link)
  • 第三篇(点击直达):详解Navigation属性栏,包括AI寻路的区域与花费代价,路线网格烘焙相关参数,如何自动添加外链接

Unity新版NavMesh专题博客指路

  • 第一篇(点击直达):新版NavMesh安装使用与概述
  • 第二篇(点击直达):详解NavMeshSurface、NavMeshLink组件的参数和应用
  • 第三篇(点击直达):详解NavMeshModifier、NavMeshModifierVolume组件的参数和应用

前排提醒:本文仅代表个人观点,以供交流学习,若有不同意见请评论留言,笔者一定好好学习,天天向上。

Unity版本[2019.4.10f1] 梦小天幼 & 禁止转载

视频讲解:
详解Unity的导航系统 (一)_BiLiBiLi


一、Nav Mesh导航系统概述

演示图

unity navmesh,详解Unity,unity,游戏引擎

unity navmesh,详解Unity,unity,游戏引擎

上图中,被黑色线条包裹的蓝色区域是可行走区域,在Unity中被称作导航网格(Nav Mesh),没有特殊情况,AI只会在这些网格中寻路,如果目标出现在了网格之外,那么AI就会判定无法抵达,停留原地。上图中的AI叫做导航网格代理(NavMesh Agent),它可以通过导航网格来推断抵达目标的最短路径,并且知道如何避开彼此。

所以想要做出一只不呆不傻的AI并且复原以上场景,我们需要注意三点:

  • 1.如何构建导航网格
  • 2.如何给一个圆柱体添加上导航网格代理
  • 3.如何做一个目标,让AI去寻找它

这就是我们这篇博客要讲的内容…

1.如何构建导航网格

在Unity中,为了减轻游戏运行中的计算量,很多数据都会进行预先计算处理,比如光照就是将光照信息预先计算到贴图上,从而节省了计算量。导航网格也是如此,对于游戏地图来说,很多路线都是固定不动的,所以完全可以预先计算好信息,供游戏调用。

首先我们创建一张地图,随意摆放几个Cube(这些Cube就充当游戏中静态障碍物作用)
unity navmesh,详解Unity,unity,游戏引擎

其次我们选中所有的Cube和地面(地面也要勾选哦!),然后为其勾选上Navigation Static选项(点击Static 的倒三角),这样我们所有的Cube就会被Unity计算在内了
unity navmesh,详解Unity,unity,游戏引擎

然后我们找到[ Window - AI - Navigation ]选项,就可以打开侧边属性栏
unity navmesh,详解Unity,unity,游戏引擎

最后我们找到Bake选项卡,选择烘焙,等待几秒,即可计算完成。
unity navmesh,详解Unity,unity,游戏引擎

需要注意的是,如果你想显示计算好的导航网格,你必须切换到Navigation属性栏才可以,还有就是,如果你不小心挪动了某个方块的位置,必须要重新计算。因为导航网格已经定型了
unity navmesh,详解Unity,unity,游戏引擎

2.如何添加导航网格代理

我们已经创建了导航网格,下面就添加一个AI,让其畅游其中吧。Unity的导航网格代理是以组件形式存在的,这就意味着我们只需要为某个物体添加一个组件,修改一些参数,就可以创建出一只寻路AI啦。

1 再次在Unity世界中创建一个物体(可以是圆柱体,正方体,自己能分清即可),然后为其添加Nav Mesh Agent组件,然后就可以了,有关组件的详细参数会在下一篇中讲解。
unity navmesh,详解Unity,unity,游戏引擎

3.如何添加目标,并让AI寻找它

现在,我们已经拥有了可供行走的路径,可供寻路的AI,只差一个目标了。这里就需要通过代码来告知AI目标,让其开始寻路。

所以首先需要创建一个脚本,并添加到寻路AI身上(也就是之前创建的圆柱体主角)。
脚本内容也很简单,如下:

using UnityEngine;
using UnityEngine.AI; //必备,别忘记添加

public class PlayerMove : MonoBehaviour
{
    public NavMeshAgent nav; //获取导航网格代理组件,通过此组件来告知AI目标
    public Transform target; //目标的位置

    private void Update()
    {
        nav.SetDestination(target.position); //每帧更新目标位置
    }
}

然后创建一个目标(可以是一个空物体或者方块,圆球),拖拽到脚本变量上,NavMeshAgent组件也别忘记拖拽!
unity navmesh,详解Unity,unity,游戏引擎

4.大功告成 点击开始游戏吧!

unity navmesh,详解Unity,unity,游戏引擎

unity navmesh,详解Unity,unity,游戏引擎


二、总结和参考资料

1.总结

本篇属于入门篇,没啥总结的。

2.参考资料

[1].Unity官方.Unity中的导航系统文章来源地址https://www.toymoban.com/news/detail-781413.html

到了这里,关于详解Unity中的Nav Mesh|导航寻路系统 (一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity核心10——导航寻路系统

    Unity 中的导航寻路系统是能够让我们在游戏世界当中,让角色能够从一个起点准确的到达另一个终点,并且能够自动避开两个点之间的障碍物选择最近最合理的路径进行前往 ​ Unity 中的导航寻路系统的本质,就是在 A 星寻路算法的基础上进行了拓展和优化 导航网格(NavMes

    2024年02月10日
    浏览(35)
  • 2022-07-15 Unity核心10——导航寻路系统

    ​ Unity 中的导航寻路系统是能够让我们在游戏世界当中,让角色能够从一个起点准确的到达另一个终点,并且能够自动避开两个点之间的障碍物选择最近最合理的路径进行前往 ​ Unity 中的导航寻路系统的本质,就是在 A 星寻路算法的基础上进行了拓展和优化 导航网格(NavM

    2023年04月08日
    浏览(29)
  • 比较以下Unity AStar Pathfinding, NavMesh, Recast Navigation 寻路算法的优点与缺点

    一、AStar Pathfinding AStar Pathfinding是一种基于图搜索的寻路算法,它使用启发式搜索来找到最短路径。AStar Pathfinding的优点包括: 高效性:AStar Pathfinding是一种高效的寻路算法,因为它使用启发式搜索来找到最短路径,可以大大减少搜索空间,从而提高寻路速度。 灵活性:ASta

    2024年02月19日
    浏览(38)
  • NavMesh 导航网格神级插件发布!高效实现 3D 自动寻路

    寻路是游戏开发中不可忽视的功能之一,NavMesh 导航网格寻路则被广泛用于在复杂的 3D 游戏世界中实现动态物体自动寻路。 开发者 iwae 创作了插件 Easy NavMesh,在 Cocos Creator 3.x 中实现了完善的 3D 自动寻路功能。 导航网格(Navigation Mesh,简称 NavMesh) 能够存储可行走区域的网

    2024年02月04日
    浏览(39)
  • unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

    首先展示效果: 在实现敌人自动巡逻这一块我们可以通过使用unity自带组件Nav Mesh Agent(导航网格代理),在省去冗杂的代码量的同时可便利的实现这一功能。 首先为敌人添加Nav Mesh Agent组件: https://docs.unity.cn/cn/2018.4/Manual/class-NavMeshAgent.html 以上是unity官方手册上关于该组件

    2024年02月01日
    浏览(70)
  • 游戏思考17:寻路引擎recast和detour学习三:客户端角度学习(unity专题导航系统,阶段三完结)

    1)导航系统作用 帮助角色进行AI智能移动:朝目标移动,绕过障碍物,上下台阶… 2)导航系统包括 ①导航网格(NavMesh):下图的蓝色地形,可以行走的表面 ②导航网格代理组件(NavMesh Agent):模拟人物移动和寻路 ③导航网格障碍物(NavMesh Obstacle):定义物体为障碍物,这样导航网

    2023年04月12日
    浏览(47)
  • Unity寻路报错“SetDestination“ can only be called on an active agent that has been placed on a NavMesh.

    这个报错表示NavMeshAgent所在节点未放置在寻路网格上。出现这个错误一般伴有 \\\"Failed to create agent because it is not close enough to the NavMesh\\\"类似警告。 表明寻路代理创建失败,后续设置目的地肯定就会导致失败。 出现此类问题需要检查: 在调用SetDestination的时候,NavMeshAgent是否启用

    2023年04月08日
    浏览(32)
  • Unity实现简单自动寻路,自动导航

    Unity实现简单自动寻路,自动导航

    2024年02月07日
    浏览(37)
  • Unity中的导航系统

            NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路。导航时,只需要给导航物体挂载导航组建,导航物体便会自行根据目标点来

    2024年02月03日
    浏览(35)
  • Unity 中的简单A*寻路 (AStar寻路)实现

    本文实现的A*算法,未经过大量的优化,后续文章会进一步实现优化 后篇:A*优化讨论 结点类: 结点管理类: 单例模板: 测试脚本: 新建一个场景,将测试脚本挂载在任意物体上 新建一个画布,并添加一个按钮。其它ui元素可随意设定 将按钮关联Init方法 后续优化文章:

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包