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中物体的自动寻路功能。
热门推荐
甲亢合并结节能喝什么饮料
蒸紫薯是冷水蒸还是热水蒸
拆迁补偿哪些证据最好
电信诈骗“杀猪盘”案件的法律适用与防范对策研究
三伏天养生6大禁忌 你都知道吗?
深入解析100G ZR4光模块:传输原理、结构设计与市场优势
亚历山大大帝的兵力探秘
医生推荐:4种中成药治疗便秘,不同体质这样选
黃水晶CITRINE|慢溫水晶天然礦石知識庫
大人喝酒后能接触婴儿吗?这些影响需警惕
秦皇岛一日游攻略
葛根花的作用
中微子被称为“幽灵粒子”:科学界为何对它情有独钟?
米线跟米饭哪个热量高
昆明乘坐地铁前往官渡古镇的完整攻略:更佳站点、换乘指南与周边交通解析
音乐疗愈火爆一线城市!疗愈师成稀缺职业
长短活用法揭秘:提升写作技巧的必备指南
个头不大的南极磷虾,居然是海上的“金矿”?
鸦片战争爆发的原因 给中国带来了什么影响
如何清理QQ好友列表,维护健康的社交关系与交流质量
VISA卡与银联卡的特性比较与选择指南
紫薯应用广泛 深加工能力有待提升
数据结构与算法入门:基本概念与度量方法
在标准数据流中映射具有关系的字段
如何判断一个专业是否适合自己的兴趣和能力
ICU 中的物质使用障碍:日益严峻的挑战
大模型为什么要微调?有哪些微调平台可以使用?
@大龄就业人员 找工作遇到困难?不妨试试这些方法
小孩吃什么容易长高而且更聪明
父母都高儿子身高仅一米五?睡眠对身高影响有多大