AI Navigation导航系统_unity基础开发教程

在unity编辑器中,有一个灰常好用的插件:Navigation。有了它1,你就可以实现人物自动走到你鼠标点击的位置,而且还会自动避开障碍物,下面就教大家如何进行创建与使用。(文章中unity版本:Unity2021.3.20f1c1)

安装插件

虽然unity编辑器里有自带,也够用,但是要知道有这个专业的插件,了解更加深入,可不安装直接跳过。

  1. 选择Window,点击Package Manager
    在这里插入图片描述
  2. 在窗口左上角点击加号,
    点击Add package by name…
    在这里插入图片描述
  3. 在name输入框中输入com.unity.ai.navigation
    然后回车
    在这里插入图片描述
  4. 然后卡顿一下(正常现象,不必担心),会出现安装的进度条,
    然后安装成功
    在这里插入图片描述
    在这里插入图片描述
  5. 如果关闭Package Manager的窗口后,你发现你的unity编辑器右上角会出现金色字样的小框框,不用担心,这是正常现象。
    由于这个package包里的部分模块处于实验状态,所以这个框框是为了提醒你。如果你想更详细的了解的话,可以点击这个金色字样的小框框,然后选择 Why am I seeing this
    在这里插入图片描述

烘焙导航系统

在烘焙导航系统之前先简单的创建一个场景(这里我直接使用的之前文章里创建的场景)
在这里插入图片描述

  1. 场景创建完成之后,
    选择Window,
    选择AI,
    点击Navigation
    在这里插入图片描述
    然后在编辑器右侧会出现一个Navigation窗口
    在这里插入图片描述
  2. 选中场景中的地板
    在这里插入图片描述
  3. 在Inspector监视器窗口中,点击Static旁边的下拉箭头
    点击Navigation Static,
    让场景地板变成导航静态
    在这里插入图片描述
  4. 还是在地板的选中状态下,
    点击Navigation窗口,选择Object,确认Navigation Area是Walkable可行区域(有的默认可能是Not Walkable)
    在这里插入图片描述
  5. 选择Back,点击下面的Back,烘焙地图
    在这里插入图片描述
  6. 此时会发现地板有一层蓝色,表示成功了,已经给地板挂上了导航系统,
    在这里插入图片描述

障碍物必不可少,下面在导航系统中创建一下障碍物

障碍物创建

我们把这个电视柜当作障碍物来创建,也可以直接创建一个立方体,

在这里插入图片描述

选中障碍物,
在Navigation窗口中,点击Object,
勾选Navigation Static,
Navigation Area属性选择Not Walkable不可行区域

在这里插入图片描述

然后再选中Bake选项,
点击下方Bake再次烘焙一下

在这里插入图片描述

然后障碍物的不可行区域就被切割出来了

在这里插入图片描述

人物的AI导航

  1. 选中人物,添加组件Add Components
    在这里插入图片描述
  2. 选择Navigation
    在这里插入图片描述
    3.选择Nav Mesh Agent
    在这里插入图片描述
    注意:
    (如果跳过插件安装步骤的话是之后三个选项,同样选择Nav Mesh Agent)
    在这里插入图片描述
  3. 在资源窗口空白处点击右键,
    选择Create,
    选择Folder,创建一个文件夹,用来存放脚本代码
    命名Script
    在这里插入图片描述
  4. 双击刚刚创建的文件夹,在空白处右键,
    选择Create,
    点击C# Script,创建一个人物导航脚本
    命名PlayerNav
    在这里插入图片描述
    在这里插入图片描述s
  5. 双击打开文件,输入以下代码,完成后记得Ctrl+S保存一下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class PlayerNav : MonoBehaviour
{
    private NavMeshAgent agent;
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;

            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100))
            {
                agent.destination = hit.point;
            }
        }
    }
}

  1. 回到编辑器,将代码文件拖到Player身上,挂载脚本
    在这里插入图片描述
  2. 运行游戏,点击鼠标就可以看到效果了。
    在这里插入图片描述

动态障碍物

在前面障碍物制作步骤,针对静态的障碍物,例如墙体、树木等,像垃圾桶和座椅属于可移动的动态障碍物,用上面的做法也可以,缺点就是移动一下障碍物就需要Bake烘焙一下,麻烦,不如一劳永逸。

下面就是动态障碍物的制作方法:
(其实很简单,只需要添加一个组件即可)

  1. 随便创建一个立方体
    在这里插入图片描述
  2. 调整一下大小,摆放到合适位置
    在这里插入图片描述
  3. 点击右下角Add Component,选择Navigation
    在这里插入图片描述
  4. 选择Nav Mesh Obstacle
    在这里插入图片描述
  5. 完成了,真就添加一个组件即可
    在这里插入图片描述
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity作为一款广泛使用的游戏开发引擎,在游戏开发领域中有着举足轻重的地位。如果想要开始学习Unity引擎,需要掌握基础概念和技能。以下是Unity基础到入门的步骤: 第一步是了解Unity的界面和基本概念,包括场景、游戏对象、组件等,这些是搭建Unity工程的基础。 第二步是学习Unity中的脚本编程,以及常用的变量类型、条件语句、循环语句等基本语法知识。 第三步是掌握Unity的资产管理和使用,包括材质、纹理、声音、动画等。 第四步是了解Unity中的游戏物理系统,包括刚体、碰撞器等,以及如何添加和控制它们。 第五步是学习Unity中比较重要的导航系统,这就需要我们详细解析这个系统的操作步骤和注意事项,这个过程就需要用到"万字教程"。 Unity导航系统是一个专门用于实现寻路和移动的功能,它可以在场景中自动生成地图,并自动计算出路线、寻找路径和避免障碍物。导航系统的基本原理是通过使用寻路算法来查找最短路径,这个算法需要用到A*算法,这也是一个常用的寻路算法。在具体操作中,用户需要首先添加导航网格、设置导航代理、通过设置导航区域建立环境信息来让导航代理获取路径信息等步骤,最终通过代码实现控制游戏对象移动的过程。 总之,要学习Unity导航系统,需要先获得一定的Unity基础,学习并熟练掌握资产管理、物理系统、脚本编程等技能,并结合"万字教程"对导航系统进行深入学习和了解,最终掌握实现游戏导航的技巧和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松爱睡觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值