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

news2024/11/19 4:16:42

前言

在类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组件的参数和应用

目录

    • 前言
      • 本系列提要
    • 一、Nav Mesh导航系统概述
      • 演示图
      • 1.如何构建导航网格
      • 2.如何添加导航网格代理
      • 3.如何添加目标,并让AI寻找它
      • 4.大功告成 点击开始游戏吧!
    • 二、总结和参考资料
      • 1.总结
      • 2.参考资料

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

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

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


一、Nav Mesh导航系统概述

演示图

在这里插入图片描述

在这里插入图片描述

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

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

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

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

1.如何构建导航网格

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

首先我们创建一张地图,随意摆放几个Cube(这些Cube就充当游戏中静态障碍物作用)
在这里插入图片描述

其次我们选中所有的Cube和地面(地面也要勾选哦!),然后为其勾选上Navigation Static选项(点击Static 的倒三角),这样我们所有的Cube就会被Unity计算在内了
在这里插入图片描述

然后我们找到[ Window - AI - Navigation ]选项,就可以打开侧边属性栏
在这里插入图片描述

最后我们找到Bake选项卡,选择烘焙,等待几秒,即可计算完成。
在这里插入图片描述

需要注意的是,如果你想显示计算好的导航网格,你必须切换到Navigation属性栏才可以,还有就是,如果你不小心挪动了某个方块的位置,必须要重新计算。因为导航网格已经定型了
在这里插入图片描述

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

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

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

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组件也别忘记拖拽!
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述


二、总结和参考资料

1.总结

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

2.参考资料

[1].Unity官方.Unity中的导航系统

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

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

相关文章

STM32入门学习之外部中断

1.STM32的IO口可以作为外部中断输入口。本文通过按键按下作为外部中断的输入,点亮LED灯。在STM32的19个外部中断中,0-15为外部IO口的中断输入口。STM32的引脚分别对应着0-15的外部中断线。比如,外部中断线0对应着GPIOA.0-GPIOG.0,…

SpaceX 摊上事?未获环境许可,星舰发射系统涉嫌违规排放污染物

马斯克“寄予厚望”的星舰SpaceX最近可能摊上事了,疑似未申请环境许可,星舰发射系统涉嫌违规排放污染物。 据报导,SpaceX可能在火焰偏转器系统方面存在环境许可问题,其在火箭发射时,可能涉及违反相关环境法规。 最近&a…

深入学习 Redis - 基于 Spring Data Redis 操作 Redis

目录 一、前置工作 1.1、引入 Spring Data Redis 依赖 1.2、编写配置文件 二、Spring Data Redis 2.1、前置知识 2.2、演示 Demo 一、前置工作 1.1、引入 Spring Data Redis 依赖 1.2、编写配置文件 spring:redis:host: 127.0.0.1port: 8888二、Spring Data Redis 2.1、…

yolo系列笔记(v4-v5)

YOLOv4 YOLOv4网络详解_哔哩哔哩_bilibili 网络结构,在Yolov3的Darknet的基础上增加了CSP结构。 CSP的优点: 加强CNN的学习能力 去除计算瓶颈。 减少显存的消耗。 结构为: 、 其实还是类似与残差网络的结构,保留下采样之前…

标准IO_格式化IO之printf函数

目录 1.可变参数原理 1.1 函数参数入栈原理 1.2 可变参数如何实现? 1.2.1 可变参数实现原理 1.2.2 固定参数有什么用? 1.2.3 va_start,va_arg,va_end如何使用? 2.printf函数实现原理 2.1 printf函数流程 2.2 printf函数格式解析原理…

WebSocket协议解析

文章目录 概要一、WS原理1.1、帧格式 二、WS实战2.1、客户端发起协议升级请求2.2、服务端响应协议升级2.3、核心事件2.4、心跳保活 三、总结 概要 项目中的IM系统是基于WebSocket做的,所以这里聊一下。 说到WS,不得不提HTTP,HTTP是基于TCP,面…

Mycat分片函数详解

Mycat新一代Mysql分布式集群,大数据处理中间件,中国第一开源软件 Checkout项目 可以用eclipse的svn插件来进行项目检出,也可以用Tortoise SVN等工具检出,由于maven(M2)中的buildnumber-maven-plugin 中的SVNkit最高支持1.7的SVN仓库,因此当你用Tortoise SVN 1.8的工具或版…

聊聊原子弹之父:奥本海默

最近诺兰的电影奥本海默即将热映,其改编自Kai Bird和 Martin J. Sherwin的 2005 年Pulitzer Prize 获奖小说:“American Prometheus: The Triumph and Tragedy of J. Robert Oppenheimer”。这本小说作者研究奥本海默25年,才得以成形,可见奥神本人身上的故事曲折和传奇。 …

MP的开发流程-2

RESTful的实现等级 0级:传统的RPC,基于SOAP的WS,调用的服务名,参数放在HTTP协议的body里面,同时必须以POST方式提交,问题在于你必须清楚的知道所有服务,子服务,及其参数的信息&…

SpringBoot环境标识设置及nacos匹配配置

本地环境标识设置 本地父类maven配置 可以看到相关的分类&#xff0c;设置环境标识主要需要用到profiles; <profiles><profile><id>dev</id><properties><!-- 环境标识&#xff0c;需要与配置文件的名称相对应 --><profiles.active&…

AX7A200教程(8): HDMI输入和输出显示1080p视频

文章目录 本章节主要将hdmi输入的1080p视频通过ddr3缓存&#xff0c;然后通过hdmi输出口输出到显示屏上显示 一&#xff0c; 突发读写命令 设置读写突发长度为64 //parameter defineparameter WRITE_LENGTH 64;parameter READ_LENGTH 64;parameter IDLE 3d0; …

SSM面试题-Spring容器的启动流程

解答: 1. BeanDefinitionReader读取配置文件(xml yml properties),创建BeanDefinition(存储bean的定义信息) 2. 配置文件读取成功后&#xff0c;将相应的配置转换成 BeanDefinition 的对象实例保存在DefaultListableBeanFactory#beanDefinitionMap 中 3. 根据配置的 BeanFacto…

fastadmin采坑之固定表格某一列

// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: id,sortName: id,fixedColumns: true,fixedRightNumber: 1,columns: [[{checkbox: true},{field: id, title: __(Id)},{field: proposal_title, title: __(Proposal_title), opera…

Modbus Poll 软件----下载和安装

Modbus Poll 下载 modbus tools 官网地址&#xff1a;https://www.modbustools.com/ 步骤1 点击进入官网&#xff0c;然后点击 DOWNLOAD&#xff0c;进入下载界面。 步骤2 在下载界面&#xff0c;点击 Download 64bit &#xff0c;下载 Modbus Poll。 步骤3 下载完成 Mo…

如何生成丰富的啸叫样本?

前段时间有个公众号的朋友问我如何生成丰富的啸叫类型&#xff0c;当时回答比较简单&#xff0c;只是把啸叫产生的条件说了一下&#xff0c;后来在写AI降噪的N种数据扩增方法时候也简单提了一下使用冲激响应(Impluse Respose, IR)和增益产生啸叫&#xff0c;今天我们把这个坑填…

RabbitMQ 教程 | 第3章 客户端开发向导

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

第1章 JavaScript简史

JavaScript的起源 JavaScript是Netscape公司与Sun公司合作开发的在JavaScript诞生之前游览器就是显示超文本文档的简单的软件&#xff0c;JavaScript为此增加了交互行为ECMAScript是JavaScript的标准化&#xff0c;本质上是同一个语言JavaScript是一门脚本语言通常只能运行在游…

VCS ICO - Intelligent Coverage Optimization

ico是vcs提供的用于优化覆盖率的feature&#xff1b;一般用户通过dist solver bofore等约束了变量的随机概率&#xff0c;而ico会在用户约束的基础上&#xff0c;做一些自动“修正”&#xff0c;以此来优化随机激励&#xff0c;提高随机多样性&#xff0c;加速覆盖率收敛&#…

【腾讯云 Cloud Studio 实战训练营】通过云IDE构建Web3项目

文章目录 背景一、 前言二、 Cloud Studio 主要功能三、Cloud Studio 实验前期准备3.1. 注册平台 四、构建Web3项目项目中技术栈 五、其他功能演示六、常见问题及注意事项七、总结八、相关链接 ​ Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(12)-Fiddler设置IOS手机抓包,你知多少???

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求&#xff0c;比如 iPhone、iPad 和 MacBook 等苹…