当前位置: 首页 > news >正文

Unity 导航寻路快速上手

搭建一个基本的寻路系统

寻路角色与场景

创建一个胶囊体作为玩家,添加刚体组件,并且冻结所有旋转和 y 轴的位置;

之后为玩家添加导航网格代理组件,即 NavMeshAgent

添加外部的场景模型(或者自行搭建),并移动摄像机到一个合适的位置;

技巧:可以先在场景中对准位置,然后取 hierarchy 面板,右键点击主摄像机,选择 align with view,即可把摄像机视角定位为目前场景视角!

在这里插入图片描述


设置场景导航与烘焙

选中场景中除了玩家以外的所有静态物体,在属性面板最右上角的 "static" ,点击小三角,选择 navigation static
如果弹出提示说需要应用到子物体,点击确认应用即可!

在这里插入图片描述


依次点击 window -> ai -> navigation 打开导航控制面板;

navigation 面板有四个子面板,目前我们仅需要关注 bake 面板,点击进入,直接点击右下角 bake 按钮进行场景导航网格的烘焙;

烘焙完成后,场景中我们之前设置的静态物体均出现淡蓝色导航网格,这表示玩家可以行走的路段!

在这里插入图片描述


鼠标点击导航

新建脚本 NavClick.cs,以下是全部代码:

  1. 首先获取导航网格对象以及主摄像机
  2. 照抄屏幕发射射线的代码
  3. agent.SetDestination 方法可以设置玩家的导航点,即玩家会根据导航网格来计算最优路径来到达目的地
  4. Debug.DrawLine 为了显示射线更清晰,我们可以使用此方法在场景面板中显示红色射线轨迹!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class NavClick : MonoBehaviour
{
    public NavMeshAgent agent;

    public Camera camera;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = camera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                agent.SetDestination(hit.point);
                Debug.DrawLine(camera.transform.position,hit.point,Color.red);
            }
        }
    }
}

代码挂载到主摄像机,并设置好导航网格代理之后,点击运行按钮,即告完成;

此时我们可实现类似 LOL 的点击位置玩家计算路径并前往的效果了


一些废话

别以为这就学完了,这仅仅是启发你的兴趣,后面还要好多要学的!!!

相关文章:

  • Advanced Git
  • Selenium基础 — Selenium自动化测试框架介绍
  • C语言小程序-通讯录(动态内存管理)
  • L2W3作业 TensorFlow教程
  • 开发中 — — 异常与日志处理
  • C++——入门详解(上)
  • 盘点六大程序员接单网站,务必收藏!
  • Java算法解题小记
  • java-php-python-springboot小说网站计算机毕业设计
  • 医药研发团队怎么利用RPA智能员工降低运营成本
  • 计算机学院2022级新生周赛(一)题解
  • 6191. 好路径的数目 并查集
  • HTML5 web
  • MySql5.1+版本主从同步配置(bin_log)模式
  • 什么是线程的拒绝策略核心线程数打满后就直接创建新线程吗
  • Js基础——数据类型之Null和Undefined
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 阿里研究院入选中国企业智库系统影响力榜
  • 基于组件的设计工作流与界面抽象
  • 那些年我们用过的显示性能指标
  • Hibernate主键生成策略及选择
  • python最赚钱的4个方向,你最心动的是哪个?
  • Semaphore
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #HarmonyOS:基础语法
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (LeetCode) T14. Longest Common Prefix
  • (八)Spring源码解析:Spring MVC
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (算法)Travel Information Center
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)树状数组
  • (转载)从 Java 代码到 Java 堆
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CORE Aws S3 使用
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 中viewstate的原理和使用
  • @Autowired和@Resource的区别
  • @test注解_Spring 自定义注解你了解过吗?
  • @Transactional 详解
  • [AutoSar]BSW_Com02 PDU详解
  • [bzoj1038][ZJOI2008]瞭望塔
  • [CentOs7]iptables防火墙安装与设置
  • [CERC2017]Cumulative Code
  • [CSS3备忘] transform animation 等
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [ffmpeg] av_opt_set 解析
  • [HCTF 2018]WarmUp (代码审计)
  • [IE9] IE9 Beta崩溃问题解决方案
  • [IE编程] 如何在IE8 下调试BHO控件/工具栏(调试Tab进程)
  • [JavaScript]如何讓IE9, IE8, IE7, IE6關閉視窗時不彈出對話訊息