Unity AI Navigation自动寻路

目录

  • 前言
  • 一、Unity中AI Navigation是什么?
  • 二、使用步骤
    • 1.安装AI Navigation
    • 2.创建模型和材质
    • 3.编写向目标移动的脚本
    • 4.NavMeshLink桥接组件
    • 5.NavMeshObstacle组件
    • 6.NavMeshModifler组件
  • 三、效果
  • 总结


前言

Unity是一款强大的游戏开发引擎,而人工智能(AI)导航是游戏中至关重要的一部分。通过Unity的AI Navigation系统,开发者可以轻松地为游戏中的角色实现自动导航功能。本文将介绍Unity中AI Navigation的基础内容,帮助开发者快速入门。


一、Unity中AI Navigation是什么?

Unity中的AI Navigation是一套用于游戏开发的导航系统,它使开发者能够为游戏中的角色提供智能的路径规划和导航功能。通过AI Navigation系统,游戏中的角色可以根据场景中的障碍物、地形等信息,自动计算出最佳路径,并沿着路径移动到目标位置。

二、使用步骤

1.安装AI Navigation

在这里插入图片描述

在这里插入图片描述

2.创建模型和材质

创建地面和材质

在这里插入图片描述

创建一个空物体,把Plane放到里面,然后挂载NavMeshSurface组件获取当前地图数据

在这里插入图片描述

NavMeshSurface 是 Unity 中用于生成导航网格的组件。它表示特定 NavMesh Agent 类型的可行走区域,并定义了场景中应该构建 NavMesh 的部分。

以下是 NavMeshSurface 组件的一些属性介绍:

  1. Agent Type:指定使用该 NavMeshSurfaceNavMesh Agent 类型。这对于烘焙设置和在寻路期间将 NavMesh Agent 匹配到适当的表面非常有用。
  2. Default Area:定义在构建NavMesh时生成的区域类型。
  3. Generate Links:如果启用此选项,由 NavMeshSurface 收集的对象将在烘焙过程中被视为生成链接。有关更多信息,请参阅链接生成部分。
  4. Use Geometry:选择用于烘焙的几何体。
  5. Object Collection:定义用于烘焙的 GameObject 集合。
  6. Advanced Settings:高级设置部分允许您自定义以下附加参数。
  7. NavMeshData(只读):定位存储 NavMesh 的资产文件。

点击bake开始烘焙地形

在这里插入图片描述

给Player挂上Nav Mesh Agent组件

在这里插入图片描述

NavMeshAgent 是 Unity 中用于导航的组件,用于控制角色在场景中的移动。

以下是 NavMeshAgent 组件的一些属性介绍:

  1. AgentType:代理的类型 。

  2. BaseOffset:相对垂直位移偏差。

  3. Speed:遵循路径时的最大移动速度。

  4. AngularSpeed:遵循路径时的最大转向速度(以度/秒为单位)。

  5. Acceleration:代理在遵循路径时的最大加速度,以单位/秒2为单位。

  6. StoppingDistance:距离目标位置停止的距离。

  7. AutoBraking:代理是否自动刹车以避免超过目标点

  8. Radius:代理的避让半径。

  9. Height:代理的高度,用于通过障碍物等。

  10. Priority :用于设置避让优先级。

  11. AreaMask:指定哪些 NavMesh 区域可通行。

3.编写向目标移动的脚本

代码如下(示例):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class SetDestination : MonoBehaviour
{private NavMeshAgent _agent;private Transform _target;// Start is called before the first frame updatevoid Start(){_agent = GetComponent<NavMeshAgent>();_target = GameObject.Find("Target").transform;}// Update is called once per framevoid Update(){_agent.SetDestination(_target.position);}
}

然后把脚本挂载Player上

4.NavMeshLink桥接组件

创建2个不贴合的平面,然后烘焙导航网格

在这里插入图片描述

创建一个空物体并添加NavMeshLink组件

NavMeshLink 是 Unity 中用于导航的组件,用于创建可导航的链接,连接使用 NavMesh 的不同位置。这些链接可以是从点到点,也可以跨越空隙,此时代理会使用入口边缘上最近的位置来穿越链接。您必须使用 NavMeshLink 来连接不同的 NavMesh Surface

在这里插入图片描述

  1. Start Point:链接的起始点,相对于 GameObject。使用 XYZ 坐标定义。

  2. End Point:链接的结束点,相对于 GameObject。使用 XYZ 坐标定义。

选中图中的小方块,然后移动

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.NavMeshObstacle组件

NavMeshObstacle 是 Unity 中用于导航的组件,用于描述移动障碍物,这些障碍物在导航世界中需要被 NavMesh Agents 避开(例如由物理系统控制的桶或箱子)。

以下是 NavMeshObstacle 组件的一些属性介绍:

创建一个模型,添加一个NavMeshObstacle组件

在这里插入图片描述
在这里插入图片描述

  1. Shape:指定障碍物的几何形状。可选择以下形状之一:

    • Box:选择一个立方体形状的障碍物。

      • Center:相对于变换位置的立方体中心。
      • Size:立方体的尺寸。
    • Capsule:选择一个椭圆形状的障碍物。

      • Center:相对于变换位置的胶囊中心。
      • Radius:胶囊的半径。
      • Height:胶囊的高度。
  2. Carve:启用此选项后,障碍物在静止时会在 NavMesh 中刻出一个洞。当障碍物移动时,它成为一个阻碍物。

  3. Move Threshold:设置更新移动刻出洞的阈值距离。当障碍物移动超过此距离时,Unity 将其视为移动中。

  4. Time To Stationary:指定障碍物被视为静止的等待时间(以秒为单位)。

  5. Carve Only Stationary:启用此选项后,仅当障碍物静止时才会刻出洞。

6.NavMeshModifler组件

NavMeshModifier 是 Unity 中用于导航的组件,用于在运行时调整 GameObject 的行为,影响导航网格的生成。以下是 NavMeshModifier 组件的一些属性介绍:

  1. Mode:指定是否考虑或忽略受影响的 GameObject。

    • Add or Modify Object:在构建 NavMesh 时考虑受影响的 GameObject。
    • Remove Object:对于指定的代理类型,在构建 NavMesh 时忽略受影响的对象。
  2. Affected Agents :指定 NavMeshModifier 影响的代理类型。

    • All:修改所有代理的行为。
    • None:排除所有代理的修改行为。
  3. Apply to Children:将配置应用于 GameObject 的子级层次结构。如果需要在层次结构的较低级别覆盖此组件的影响,可以添加另一个 NavMeshModifier 组件。

  4. Override Area:更改受影响的 GameObject 的区域类型。如果要更改区域类型,请选中复选框,然后在区域类型下拉菜单中选择新的类型。如果不想更改区域类型,取消选中复选框。

  5. Override Generate Links:在生成链接时,强制包括或忽略受影响的 GameObject。

  6. Generate Links:指定在生成链接时是否包括受影响的 GameObject。如果要在 NavMesh 构建过程中包括 GameObject,请选中此复选框

创建一个路线并挂载NavMeshModifler组件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、效果

在这里插入图片描述

总结

Unity的AI Navigation系统为游戏开发者提供了强大的路径规划和导航功能,使得开发者能够轻松实现游戏中角色的智能行动。通过本文的介绍,希望读者能够对Unity中AI Navigation的基础使用有所了解,并能够在自己的游戏项目中应用起来。

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

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

相关文章

Swagger添加JWT验证(ASP.NET)

文章目录 JWT1、解析2、配置JWT JWT 1、解析 1&#xff09;客户端向授权服务系统发起请求&#xff0c;申请获取“令牌”。 2&#xff09;授权服务根据用户身份&#xff0c;生成一张专属“令牌”&#xff0c;并将该“令牌”以JWT规范返回给客户端 3&#xff09;客户端将获取到的…

Kafka重要配置参数全面解读(重要)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Kafka重要配置参数全面解读(重要 前言auto.create.topics.enableauto.leader.rebalance.enablelog.retention.{hour|minutes|ms}offsets.topic.num.partitions 和 offsets.topic.replication.factorlo…

天星金融(原小米金融)聚焦金融知识普及和反诈宣传,践行金融为民

在信息网络快速发展的背景下&#xff0c;移动互联网为大众的生活带来诸多便利。随之而来的新型诈骗手段也层出不穷&#xff0c;成为当前影响群众安全感、幸福感的“隐形杀手”。天星金融&#xff08;原小米金融&#xff09;一直以来严厉抵制诈骗犯罪行为&#xff0c;积极开展各…

php 快速入门(七)

一、操作数据库 1.1 操作MySQL的步骤 第一步&#xff1a;登录MySQL服务器 第二步&#xff1a;选择当前数据库 第三步&#xff1a;设置请求数据的字符集 第四步&#xff1a;执行SQL语句 1.2 连接MySQL 函数1&#xff1a;mysql_connect() 功能&#xff1a;连接&#xff08;登录…

软件概要设计说明书word原件(实际项目)

一、 引言 &#xff08;一&#xff09; 编写目的 &#xff08;二&#xff09; 范围 &#xff08;三&#xff09; 文档约定 &#xff08;四&#xff09; 术语 二、 项目概要 &#xff08;一&#xff09; 建设背景 &#xff08;二&#xff09; 建设目标 &#xff08;三&a…

深入了解RabbitMQ:构建高效的消息队列系统(三)

本系列文章简介&#xff1a; 本系列文章将深入了解RabbitMQ的工作原理、特性和最佳实践。我们将介绍如何安装和配置RabbitMQ服务器&#xff0c;以及如何开发生产者和消费者应用程序。我们还将探讨如何处理消息的持久化、消息路由和消息过滤。除此之外&#xff0c;我们将研究如何…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率&#xff08; A c c u r a c y Accuracy Accuracy&#xff09; 二分类查准率 P r e c i s i o n Precision Precision&#xff0c;查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…

ChatGPT 商业金矿(上)

原文&#xff1a;ChatGPT Business Goldmines 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第一章&#xff1a;为什么我写这本书 欢迎阅读《ChatGPT 多源收入&#xff1a;20 个利润丰厚的业务&#xff0c;任何人都可以在一周内使用 ChatGPT 开始》。我很高兴分享我…

<QT基础(5)>事件监听

事件监听 事件监听&#xff08;Event Handling&#xff09;是在程序中监视和响应发生的事件的一种机制。在Qt中&#xff0c;事件监听是一种常见的用于处理用户输入、系统事件以及其他类型事件的方法。通过事件监听&#xff0c;您可以在发生特定事件时捕获事件并执行相应的操作…

常用开源机器学习库

开源工具和机器学习库为数据科学家提供了强大的工具集&#xff0c;以便进行数据分析、模型训练和预测。以下是一些流行的开源机器学习库的简单介绍&#xff1a; Scikit-learn&#xff1a; Scikit-learn 是一个广泛使用的 Python 机器学习库&#xff0c;提供了大量的监督和非监督…

React + 项目(从基础到实战) -- 第一期

react是什么 任何领域,强大,高效的东西一定是简单的 react 是js,外加一点模板语言JSX(像HTML)下载最多,生态丰富 符合js语法 React 官方中文文档 (docschina.org) 核心价值 组件化 数据驱动视图 组件化 不是react原创,在React流行开拆分组件页面,通过组件拼接页面,实现组…

在Rocky Linux上安装Docker

在Rocky Linux上安装Docker&#xff0c;您可以按照以下步骤操作&#xff1a; 更新您的软件包索引&#xff1a; sudo dnf update 安装必要的软件包&#xff1a; sudo dnf config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo 安装Docker Eng…

【案例·增】获取当前时间、日期(含,SQL中DATE数据类型)

问题描述&#xff1a; 需要使用当前时间、日期&#xff0c;可以使用 SQL 中的 CURDATE() 、NOW()、CURTIME()运算符 案例&#xff1a; INSERT INTO table_name(current_time, column_name2,...) VALUES (NOW(),, ...)规则(Date 相关函数)&#xff1a; 规则(Date数据类型)

Pytorch:torch.utils.data.DataLoader

torch.utils.data.DataLoader 是PyTorch提供的一个功能&#xff0c;用来包装数据集并提供批量获取数据&#xff08;batch loading&#xff09;、打乱数据顺序&#xff08;shuffling&#xff09;、多进程加载&#xff08;multiprocessing loading&#xff09;等功能。当进行深度…

全栈的自我修养 ———— 微信小程序实现上传并保存图片

上传文件 1、使用原生上传 uni.chooseImage({success: (chooseImageRes) > {const tempFilePaths chooseImageRes.tempFilePaths;uni.uploadFile({url: ......,filePath: tempFilePaths[0], // name是服务端的属性名name: file, // 可添加请求头:header: { "Content…

如何在极狐GitLab 自定义 Pages 域名、SSL/TLS 证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…

核验用户提供的身份证号和姓名是否一致的实名认证接口、C#调用

为什么要进行实名认证&#xff1f;互联网时代&#xff0c;网民在网上进行遨游的过程中&#xff0c;我们无法辨别其身份的真伪&#xff0c;网民财产安全没有保障&#xff0c;因此当平台用户在进行注册时&#xff0c;都会要求提供身份证信息使用实名认证接口来判断身份信息的真实…

Spark GraphX 算法实例

文章目录 Spark GraphX 算法实例PageRank算法连通分支算法三角形计算算法 Spark GraphX 算法实例 GraphX 中自带一系列图算法来简化分析任务。这些算法存在于org.apache.spark.graphx.lib包中&#xff0c;可以被Graph通过GraphOps直接访问。本章节主要介绍GraphX中主要的三个算…

Linux中关于vim相关操作的练习题,实操训练,配有相应的答案提示

3月25日vim相关操作 题目1&#xff1a; 1&#xff09;将/etc/hosts网络配置文件复制到/tmp/mydir下&#xff1b; 2&#xff09;使用vim编辑器打开hosts文件&#xff0c;按i进入编辑模式&#xff0c;将本机IP地址和主机名(client1)映射。 3&#xff09;按下esc键回到命令模式…

uniapp输入框事件(防抖)

一、描述 在输入框输入内容或者说输入关键词的时候&#xff0c;往往都要进行做防抖处理。如果不做防抖&#xff0c;你输入什么&#xff0c;动态绑定的数据就会保持一致。这样不好吗&#xff0c;同步获取。有个业务场景&#xff0c;如果是搜索框&#xff0c;你每次一个字符&…