Unity之实现最短路径自动寻路功能
创作时间:
作者:
@小白创作中心
Unity之实现最短路径自动寻路功能
引用
CSDN
1.
https://blog.csdn.net/qq_62675453/article/details/137753453
在Unity开发中,实现自动寻路功能是游戏开发中的一个重要环节。本文将通过一个简单的项目实例,详细介绍如何使用Unity自带的NavMesh系统来实现物体的自动寻路功能。
- 创建一个新的Unity项目,并创建一个平面Plane。
- 创建三种立方体Cube,我们这里用颜色将它们区分开,设红色方块为障碍、蓝色方块为终点,绿色方块为起点。我们的目的就是通过NavMesh系统让起点方块能绕过障碍方块,自动寻路到终点方块。方块设置后如下,可以多添加一些障碍方块让寻路变得复杂一些,三种方块都需要添加Box Collider组件,使得它们能互相碰撞。
- 在左上角菜单栏选择“Window”->"AI"->"Navigition"打开Navigition面板,并选中“所有障碍方块+地面+终点方块”,点击Navigition面板上的“Object”,把Navigation Static勾选上。
(1)Navigition面板
(2)勾选Navigation Static
继续点击Navigition面板上的“Bake”点击“Bake”,生成导航网格。
(1) Navigition面板上的“Bake”
(2)点击"Bake"
此时平面上所有蓝色的区域都是寻路对象的可行走区域,我们的起点方块需要计算出自己与终点方块的最短距离,移动并接触它。
- 点击起点方块,给它添加一个“Nav Mesh Agent”组件,并添加我们的自动寻路脚本(这里取名为follow),脚本代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class follow : MonoBehaviour
{
public NavMeshAgent nav;
public Transform target;
private void Update()
{
this.nav.SetDestination(this.target.position);
}
}
思路非常简单,定义了一个NavMeshAgent变量nav和Transform变量target,然后在Update方法里调用SetDestination方法要nav去寻找target的位置position。
我们把以上脚本挂载给起点方块,把起点方块的“Nav Mesh Agent”组件作为nav变量,终点方块作为target变量,再运行程序,就可以发现我们的起点方块可以绕过我们设置好的障碍,以最短路径去接触终点方块了。
(1)添加”Nav Mesh Agent”组件
(2)给起点方块“Start Cube”挂载脚本
(3)将”Nav Mesh Agent”组件赋给变量Nav,终点方块“End Cube”赋给变量target
- 运行效果
以上,我们就成功运用NavMesh系统构建了Unity中物体的自动寻路功能。
热门推荐
守护唇红缘,揭秘口腔健康的“微笑防线”
积雪苷片的作用是什么?可以修复疤痕吗
积雪苷片的作用是什么?可以修复疤痕吗
安装程序的进度条是如何计算的
从基础到高级:谐振、Q因数与RLC电路串并联转换的深度解析
网络安全全方略
横县茉莉花茶:国家地理标志保护产品
卷心菜的营养价值及功效与作用
开平各镇街美食介绍!名菜、3.3小吃、名店特色菜
怎么挑选理财型基金并做出决策?这些基金的选择依据是什么?
调压阀:维持压力平衡的关键组件
MIT开发突破性成像技术:普通显微镜也能看到纳米级细节
肾病患者如何科学饮水?透析肾友需严格限水
OSS的gzip压缩如何使用?教你轻松节省存储空间!
执行力的重要性及怎样提高执行力
护肤品包装设计101:你需要知道的一切
东盟10国有多牛?新加坡是金融中心,文莱人均GDP超3万美元
如何预防老年斑最有效方法
如何选择合适的CT或MRI系统
如何编写一份有效的质量管理手册?
风险管理:密闭空间的过程挑战
苦丁茶怎么喝?医生教你正确饮用方法
STEP、TMUA、MAT三大数学笔试终极指南:英本申请的关键一战!
公积金贷款的利息计算方法是什么?这种贷款的利率有何特点?
胆结石的饮食疗法
32岁就可能得肝内胆管结石?这些成因和预防方法要知道
“莫名被拒,让人无语!”就业歧视怎么破?
《黄帝内经》最经典8句话,胜过一切补药!
中国中医协会科学院深入解读《黄帝内经》中的“治未病”理念与现代医学的结合
当"假一赔十"遇上"职业打假"?新规来了!