Unity之实现最短路径自动寻路功能

        在Unity开发中若想实现自动寻路功能,可以使用Unity自带的NavMesh系统来完成。以下我将从零开始用一个简单的项目实例来展示一下如何使用NavMesh系统。

        1.创建一个新的Unity项目,并创建一个平面Plane。

        2.创建三种立方体Cube,我们这里用颜色将它们区分开,设红色方块为障碍、蓝色方块为终点,绿色方块为起点。我们的目的就是通过NavMesh系统让起点方块能绕过障碍方块,自动寻路到终点方块。方块设置后如下,可以多添加一些障碍方块让寻路变得复杂一些,三种方块都需要添加Box Collider组件,使得它们能互相碰撞。

        3.在左上角菜单栏选择“Window”—>"AI"—>"Navigition"打开Navigition面板,并选中“所有障碍方块+地面+终点方块”,点击Navigition面板上的“Object”,把Navigation Static勾选上。 (1)Navigition面板

(2)勾选Navigation Static

继续点击Navigition面板上的“Bake”点击“Bake”,生成导航网格。 (1) Navigition面板上的“Bake”

(2)点击"Bake"                                                                                                                               

此时平面上所有蓝色的区域都是寻路对象的可行走区域,我们的起点方块需要计算出自己与终点方块的最短距离,移动并接触它。

        4.点击起点方块,给它添加一个“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

5.运行效果

以上,我们就成功运用NavMesh系统构建了Unity中物体的自动寻路功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值