【unity小技巧】unity3D寻路指示轨迹预测

最终效果

在这里插入图片描述

文章目录

  • 最终效果
  • 前言
  • 设置好LineRenderer线组件配置,用于绘制寻路轨迹
  • 代码
  • 烘培导航网格
  • 运行效果
  • 参考

前言

最近刷到b站up主山长操作库的内容,感觉很有意思,于是就简单整理了一下。注意本文的实现思路完全是按这位up整理的,这里就先放记录在这里,后续如果实际项目有用的到再深入研究。

设置好LineRenderer线组件配置,用于绘制寻路轨迹

在这里插入图片描述

代码

新增代码控制寻路轨迹显示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class NavPathLineRenderer : MonoBehaviour
{[SerializeField] private Transform player;           // 玩家的Transform[SerializeField] private Transform target;           // 目标的Transform[SerializeField] private LineRenderer line;          // 用于绘制路径的LineRenderer组件[SerializeField] private float pathHeightOffset = 0.3f;   // 绘制路径时的垂直偏移量(在地面上方)[SerializeField] private int quality = 10;           // 每个路径段的分段数[SerializeField] private float maxHeight = 10;       // 射线最大高度[SerializeField] private float drawUpdateSpeed = 0.2f;   // 路径绘制更新速度private Coroutine drawCoroutine;    // 用于管理路径绘制的协程引用private void Start(){// 在开始之前停止任何现有的协程if (drawCoroutine != null){StopCoroutine(drawCoroutine);}drawCoroutine = StartCoroutine(DrawNavMeshLine());}// 协程:持续绘制NavMesh路径private IEnumerator DrawNavMeshLine(){WaitForSeconds wait = new WaitForSeconds(drawUpdateSpeed);   // 等待时间间隔NavMeshPath path = new NavMeshPath();   // 存储计算路径的NavMeshPath对象// 只要目标不为空,就持续绘制路径while (target != null){// 从玩家位置到目标位置计算路径if (NavMesh.CalculatePath(player.position, target.position, NavMesh.AllAreas, path)){// 平滑并绘制路径线条List<Vector3> newPath = new List<Vector3>();   // 存储平滑后的路径点for (int i = 0; i < path.corners.Length - 1; i++){Vector3 currentPoint = path.corners[i] + Vector3.up * maxHeight;   // 当前路径段起始点Vector3 nextPoint = path.corners[i + 1] + Vector3.up * maxHeight;  // 下一个路径段起始点// 细分路径段并向下射线,寻找有效的地面点for (int j = 0; j < quality; j++){Vector3 calPoint = Vector3.Lerp(currentPoint, nextPoint, (1f / quality) * j);   // 计算插值点RaycastHit hit;// 射线向下,寻找地面点if (Physics.Raycast(calPoint, Vector3.down, out hit, Mathf.Infinity, 1 << LayerMask.NameToLayer("Ground"))){newPath.Add(hit.point);   // 将有效的地面点添加到平滑路径中}}}newPath.Add(target.position);   // 将最终目标位置添加到路径中// 设置LineRenderer的位置数量和位置line.positionCount = newPath.Count;for (int i = 0; i < newPath.Count; i++){// 每个位置设置在地面上方的偏移量处line.SetPosition(i, newPath[newPath.Count - 1 - i] + Vector3.up * pathHeightOffset);}// 设置玩家的NavMeshAgent路径为计算出的路径player.GetComponent<NavMeshAgent>().SetPath(path);}yield return wait;   // 等待下一次更新}}
}

挂载代码,配置参数
在这里插入图片描述

烘培导航网格

设置地面图层
在这里插入图片描述
设置不同地面的优先级,区分不同表面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
烘培寻路网格
在这里插入图片描述

运行效果

在这里插入图片描述

参考

https://www.bilibili.com/video/BV1wF4m1c75Y/?spm_id_from=pageDriver&vd_source=2526a18398a079ddb95468a0c73f126e

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVAEE之网络原理(2)_传输控制协议(TCP)、概念、格式、确认应答及超时重传机制

前言 在上一节中&#xff0c;我们介绍了 UDP (用户数据报) 的相关知识&#xff0c;在这一节中我们将继续介绍传输层中另一种更为重要的协议。 一、什么是TCP协议&#xff1f; 1.1 TCP 基本概念 TCP协议全称&#xff1a;传输控制协议&#xff08;TCP&#xff0c;Transmission C…

python基础语法 002 - 4 字符串

1 字符串 字符串&#xff1a;引号括起来的数据类型 # 双引号 a "yuze wang"# 单引号 a ’yuze wang‘# 三引号 a ’‘’yuze‘‘’ a """yuze"""注意&#xff1a;所有格式表示都是半角&#xff0c;全角会报错 1.1 引号表示 …

HSE在企业中的重要性:健康、安全与环境的全面保障

在当今企业运营中&#xff0c;健康、安全与环境&#xff08;HSE&#xff09;管理体系已经成为不可或缺的一部分。HSE管理不仅保护员工的健康和安全&#xff0c;还致力于环境的可持续发展。本文将简洁明了地阐述HSE在企业中的关键作用及其带来的综合效益。 员工健康保护 健康风…

深入理解Qt状态机的应用(一)

Qt的状态机框架提供了一种管理复杂系统状态的方法&#xff0c;它基于经典的有限状态机&#xff08;FSM&#xff09;理论。这种框架在开发涉及多种状态和状态之间需要明确转换的应用程序时特别有用&#xff0c;如用户界面交互、网络协议、游戏开发等场景。 什么是有限状态机&a…

手写一个JSON可视化工具

前言 JSON 平时大家都会用到&#xff0c;都不陌生&#xff0c;今天就一起来实现一个 JSON 的可视化工具。 大概长成下面的样子&#xff1a; 树展示 相比于现有的一些 JSON 格式化工具&#xff0c;我们今天制作的这个小工具会把 JSON 转为树去表示。其中&#xff1a; 橙色标…

跟TED演讲学英文:A tale of mental illness -- from the inside by Elyn Saks

A tale of mental illness – from the inside Link: https://www.ted.com/talks/elyn_saks_a_tale_of_mental_illness_from_the_inside Speaker: Elyn Saks Date: June 2012 文章目录 A tale of mental illness -- from the insideIntroductionVocabularySummaryTranscriptA…

全新AI图像擦处理工具上线,手机电脑版资源合集下载

下载地址&#xff1a; 安卓手机版&#xff1a; 点击下载 苹果手机版&#xff1a; 点击下载 电脑版&#xff08;支持Mac和Windows&#xff09;&#xff1a; 点击下载 图像处理技术在当今迅速发展&#xff0c;为了满足广大用户的需求&#xff0c;我们推出了一款强大的图像优化…

三星S20以上手机中的动态相片及其分解

三星S20以后的相机&#xff0c;相机拍出来的图片&#xff0c;用三星手机自带的“相册”打开之后&#xff0c;还会有“查看动态照片”的选项&#xff0c;点击之后就能查看拍照片时前后2秒左右的视频&#xff01; 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…

yum的概念、相关命令、ftp http部署步骤;NFS共享文件操作步骤

目录 yum 配置文件 缓存功能操作步骤 创建并配置本地仓库文件 yum相关命令 yum install __ yum repolist yum list __ yum info __ yum search __ yum whatprovides __ yum remove __ yum -y update __ yum history yum grouplist yum groupinstall "__&q…

前沿技术丨实车测试必须注意的3个方面

在汽车网络通信中&#xff0c;ECU零部件测试、域/系统测试在测试条件上存在局限性&#xff0c;往往由于无法完全仿真工作环境、无法排除特殊干扰因素、异常场景预估不充分&#xff0c;导致在集成到整车后才新暴露出一些功能、性能、兼容性问题。 实车通信测试是作为测试验证的…

DolphinScheduler日志乱码、worker日志太多磁盘报警、版本更新导致不兼容怎么办?

作者 | 刘宇星 本文作者总结了在使用Apache DolphinScheduler过程中遇见过的常见问题及其解决方案&#xff0c;包括日志出现乱码、worker日志太多磁盘报警、版本更新导致不兼容问题等&#xff0c;快来看看有没有困扰你想要的答案吧&#xff01; DolphinScheduler集群环境有多…

实验室装修公司教你在实验室装修设计中要注意哪些细节

实验室装修设计是一项高度专业化的工作&#xff0c;涉及到空间布局、材料选择、家具配置、施工质量和验收标准等多个方面。一个成功的实验室装修项目&#xff0c;不仅要满足实验操作的需求&#xff0c;还要确保人员的安全和舒适。以下是广州实验室装修公司小编分享的在实验室装…

github如何删除仓库?

之前练习Git上传的时候&#xff0c;在Github创建的测试项目已经不需要了&#xff0c;所以要如何删除&#xff1f; 首先进入Github主页&#xff0c;可以直接点击左侧1处的仓库&#xff0c;也可以点击2处的头像&#xff0c;再选择进入那个仓库。 我选择删除最后一个FlashAndShan…

高压线防外破警示灯在电力安全发挥的作用_鼎跃安全

高压输电线路往往跨越城市、乡村和野外&#xff0c;覆盖范围广泛。随着城乡建设和交通运输的快速发展&#xff0c;高压线路周围的活动频繁&#xff0c;外部破坏风险增加。车辆撞击电线杆、施工机械误碰线路以及人为破坏等事件时有发生&#xff0c;严重影响电力供应的稳定性和安…

基于javassm实现的物流管理系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 数据库&#xff1a;mysql 系统页面展示 4.1登陆页面 平台登录&#xff1a;主要是做权限分配和安全限制等操作。可以把快递员&#xff0c;客户&#xff0c;派单员等人员角色区分开来。 4.2注册页面 用户注册界面&#xff1a;…

如何在宝塔中使用命令行执行命令

一、 进入宝塔&#xff0c;找到网站然后点击根目录 二、进入项目中&#xff0c;然后点击 终端 三、如果这里会弹出输入密码的框&#xff0c;那就是需要你输入一下你服务器的 账号密码&#xff0c;然后就登录进去了&#xff0c;可以在这里直接执行命令即可&#xff0c;比如我这…

RERCS系统开发实战案例-Part08 FPM 应用程序的表单组件(From UIBB)与列表组件(List UIBB)组合的创建

1、新建From UIBB的FPM Application的快速启动面板 备注&#xff1a;该步骤可第一步操作&#xff0c;也可最后一步操作&#xff0c;本人习惯第一步操作。 1&#xff09;使用事务码 LPD_CUST&#xff0c;选择对应的角色与实例进入快速启动板定制页面&#xff1b; 2&#xff09…

函数依赖-函数依赖、平凡函数依赖、完全与部分函数依赖、传递函数依赖

一、引言 函数依赖是关系模式中属性与属性之间存在的一种重要数据依赖 1、将关系模式R的模式结构改为 R&#xff08;SNO&#xff0c;CNO&#xff0c;SN&#xff0c;SD&#xff0c;DD&#xff0c;GRADE&#xff09; 并对属性列进行重命名 R&#xff08;学生学号&#xff0c…

力扣hot100:31. 下一个排列

LeetCode&#xff1a;31. 下一个排列 字典序的大小排序&#xff1a; 从前往后对比&#xff0c;如果先出现更小字符的&#xff0c;字典序更小&#xff0c;如果有个字符串结束了&#xff0c;则它更小。string s "112233"和string t "1122334"&#xff0c;…

无代码爬虫八爪鱼采集器-如何采集携程网指定酒店差评信息

场景描述&#xff1a;有一些酒店会分析同行的差评原因&#xff0c;以便提前做预案&#xff0c;避免自己酒店也放同样的错误。他们通过采集携程网指定酒店的提取中差评&#xff0c;使用的采集工具为无代码爬虫软件八爪鱼采集器免费版&#xff0c;下载链接&#xff1a;1.软件分享…