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

[Unity]AstarPathfindingProject动态烘焙场景

需求

项目是MMO大场景,按地块划分了10x10的大格子。角色移动时动态更新周边场景,且角色还有传送功能。
项目中寻路用了AstarPathfindingProject的Grid。因此需要动态烘焙寻路信息。

核心代码

    private void bakeAStarPath(){AstarPath astarPath = AstarPath.active;if (astarPath == null){Debug.LogError("AstarPath 实例未找到,请确保场景中有 AstarPath 组件!");return;}// 获取第一个 GridGraph(假设你只有一个 GridGraph)GridGraph gridGraph = astarPath.data.gridGraph;if (gridGraph == null){Debug.LogError("GridGraph 未找到,请确保已添加 GridGraph!");return;}float newGraphCenterX = curCenterXIndex * xSize + xSize * 0.5f;float newGraphCenterZ = curCenterZIndex * zSize + zSize * 0.5f;gridGraph.center = new Vector3(newGraphCenterX, 0, newGraphCenterZ);gridGraph.width = (int)xSize * 3;gridGraph.depth = (int)zSize * 3;//// 重新计算并扫描 GridGraphastarPath.Scan();

可能遇到的问题

  • 1,烘焙后场景内可通行区域是不可通行的

一般是时机问题,烘焙的时候可能场景还没有准备好。笔者的做法是场景加载好后延迟一个物理帧再烘焙。因为烘焙的底层是通过射线来检测的,确保场景中的物理数据准备就绪再烘焙可以规避这个问题。

yield return new WaitForFixedUpdate();
//TODO:bake callback
  • 2,加了物理帧延迟后依旧很小概率会出现烘焙不上的问题

取一个必可通行的点(比如主角的脚下),检测该点所在的node是否可通行,若不可通行,再重复多次bake,直至可通行。

    int retryCount = 0;private void bakeAStarPath(){AstarPath astarPath = AstarPath.active;if (astarPath == null){Debug.LogError("AstarPath 实例未找到,请确保场景中有 AstarPath 组件!");return;}// 获取第一个 GridGraph(假设你只有一个 GridGraph)GridGraph gridGraph = astarPath.data.gridGraph;if (gridGraph == null){Debug.LogError("GridGraph 未找到,请确保已添加 GridGraph!");return;}float newGraphCenterX = curCenterXIndex * xSize + xSize * 0.5f;float newGraphCenterZ = curCenterZIndex * zSize + zSize * 0.5f;gridGraph.center = new Vector3(newGraphCenterX, 0, newGraphCenterZ);gridGraph.width = (int)xSize * 3;gridGraph.depth = (int)zSize * 3;//// 重新计算并扫描 GridGraphastarPath.Scan();var checkNode = gridGraph.GetNearest(new Vector3(selfRolePos.x, 0, selfRolePos.z));bool bakerFlag = false;if (checkNode.node.Walkable){ bakerFlag = true;}else{ bakerFlag = false;}if (bakerFlag == false){Debug.LogError("GridGraph扫描失败,准备重新扫描");if (retryCount < 3){//再次扫描TimerTween.Delay(0.5f, () =>{retryCount++;this.bakeAStarPath();}).SetTag("delayBakerA*" + retryCount).Start();}}else{Debug.LogError("GridGraph Center 已更新为: " + gridGraph.center + " 并完成重新扫描, xIndex:" + this.curCenterXIndex + ", zIndex:" + this.curCenterZIndex);retryCount = 0;} }
  • 3,异步烘焙

插件也提供异步扫描的方式,上述代码中astarPath.Scan();为同步扫描。若场景不太大的话同步扫描耗时较低是可以接受的。若耗时过高,造成严重卡顿,可以考虑使用异步烘焙

    private void bakeAStarPath(){//...略StartCoroutine(ScanGraphAsync(astarPath));}IEnumerator ScanGraphAsync(AstarPath astarPath){// 开始异步扫描var progress = astarPath.ScanAsync();foreach (var p in progress){//Debug.Log ("扫描进度: " + p.progress);  yield return null;}Debug.LogError("异步扫描完成!");}

相关文章:

[Unity]AstarPathfindingProject动态烘焙场景

需求 项目是MMO大场景&#xff0c;按地块划分了10x10的大格子。角色移动时动态更新周边场景&#xff0c;且角色还有传送功能。 项目中寻路用了AstarPathfindingProject的Grid。因此需要动态烘焙寻路信息。 核心代码 private void bakeAStarPath(){AstarPath astarPath Astar…...

Go语言处理HTTP下载中EOFFailed

在 Go 语言中使用 HTTP 下载文件时遇到 EOF 或 Failed 错误&#xff0c;通常是由于网络连接问题、服务器中断、未正确处理响应体或并发写入冲突等原因导致的。以下是详细的解决方案&#xff1a; 1. 检查错误类型并重试 io.EOF 错误可能表示连接被服务器关闭&#xff0c;而 Fai…...

React学习(一)

React 基础概念 组件&#xff1a;React 应用的基本构建块&#xff0c;可以是类组件或函数组件。JSX&#xff1a;JavaScript 的语法扩展&#xff0c;允许在 JavaScript 中写 HTML 结构。Props&#xff1a;组件的输入参数&#xff0c;用于父组件向子组件传递数据。State&#xf…...

QML 属性动画、行为动画与预定义动画

目录 引言相关阅读本文使用的动画属性工程结构示例解析示例1&#xff1a;属性动画应用示例2&#xff1a;行为动画实现示例3&#xff1a;预定义动画 总结工程下载 引言 QML动画系统为界面元素提供了流畅的过渡效果。本文通过三个示例&#xff0c;结合属性动画(PropertyAnimatio…...

UML活动图零基础入门:1 分钟掌握核心逻辑(附实战模板)

想快速搞懂UML活动图怎么用&#xff1f;别担心&#xff01;作为软件开发和业务流程设计的动态流程图&#xff0c;UML活动图能直观展现系统操作步骤、决策逻辑和并行流程&#xff0c;是团队协作中沟通需求、优化流程的必备工具。无论是产品经理梳理业务流程&#xff0c;还是开发…...

临床决策支持系统的提示工程优化路径深度解析

引言 随着人工智能技术在医疗领域的迅猛发展,临床决策支持系统(CDSS)正经历从传统规则引擎向智能提示工程的范式转变。在这一背景下,如何构建既符合循证医学原则又能适应个体化医疗需求的CDSS成为医学人工智能领域的核心挑战。本报告深入剖析了临床决策支持系统中提示工程的…...

[模型部署] 3. 性能优化

&#x1f44b; 你好&#xff01;这里有实用干货与深度分享✨✨ 若有帮助&#xff0c;欢迎&#xff1a;​ &#x1f44d; 点赞 | ⭐ 收藏 | &#x1f4ac; 评论 | ➕ 关注 &#xff0c;解锁更多精彩&#xff01;​ &#x1f4c1; 收藏专栏即可第一时间获取最新推送&#x1f514;…...

使用 LSTM/GRU 预测设备异常的模型

LSTM(Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,旨在解决传统 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。它通过引入门控机制和单元状态来更好地控制信息的流动,使得网络能够学习到长期依赖关系。以下是其主要特点: 门控机制:包括遗忘门、输…...

八股文--JVM(1)

⭐️⭐️JVM内存模型 程序计数器&#xff1a;可以看作是当前线程所执行的字节码的行号指示器&#xff0c;用于存储当前线程正在执行的 Java 方法的 JVM 指令地址。如果线程执行的是 Native 方法&#xff0c;计数器值为 null。是唯一一个在 Java 虚拟机规范中没有规定任何 OutOf…...

BM25 算法与关键词提取在向量数据库中的实践优化

BM25 算法与关键词提取在向量数据库中的实践优化 在实际构建问答系统或语义检索场景中&#xff0c;向量数据库&#xff08;如 Weaviate&#xff09;提供了基于语义匹配的检索能力&#xff0c;然而我们发现 BM25 关键词检索效果不理想&#xff0c;甚至出现了召回率过低、查询必…...

济南超算研究所面试问题

1.自我介绍 2.java抽象类与接口的区别 3.抽象类能否实例化 4.在项目中用的抽象类偏多还是接口偏多 5.抽象类用的场景介绍一下 6.java中数据结构有哪些 7.数据的基本类型 8.引用类型&#xff0c;包装类型 9.是一个场景题&#xff0c;在查询数据库中的数据时&#xff0c;…...

“多维像素”可赋能具身智能非凡感知力——昱感微参加2025松山湖中国IC创新高峰论坛

5月13日&#xff0c;由中国半导体行业协会集成电路设计分会、芯原微电子&#xff08;上海&#xff09;股份有限公司联合主办的第十五届松山湖中国IC创新高峰论坛在东莞松山湖举行。本届松山湖论坛以“面向‘具身智慧机器人’的创新IC新品推介”为主题&#xff0c;吸引了许多知名…...

解决CLion控制台不能及时显示输出的问题

CLion 2025版本可以免费用于非商业用途了&#xff0c;下载来试用了一下&#xff0c;与JB的其它 IDE一样的资源占用比较大&#xff0c;流畅度不及VSCode。 在Windows下创建了一个简单的控制台应用程序&#xff0c;使用printf和std::cout输出字符串&#xff0c;发现CLion的控制台…...

多尺度对比度调整

一、背景介绍 受到了前面锐化算法实现的启发&#xff0c;对高频层做增强是锐化&#xff0c;那么对中低频一起做增强&#xff0c;就应该能有局域对比度增强效果。 直接暴力实现了个基本版本&#xff0c;确实有对比度增强效果。然后搜了下关键字&#xff0c;还真找到了已经有人这…...

虹桥前湾印象城MEGA品牌大会灵感迸发,共绘湾系生活新章

前言&#xff1a;当千年水韵流淌至上海前湾&#xff0c;当苏州河的生态肌理转化为商业空间的呼吸脉络……上海虹桥前湾印象城MEGA“漫漫而来”。 5月15-16日&#xff0c;以“灵感新章 Wave of Megagination”为主题的虹桥前湾印象城MEGA品牌大会成功举办&#xff0c;正式掀开长…...

新京东,正在成为一种生活方式

出品|何玺排版|叶媛 一个新京东&#xff0c;正在从“心”诞生。 2025年2月11日之前&#xff0c;如果问京东是做什么的&#xff0c;相信大多数人会回答京东是电商平台&#xff0c;卖家电数码日用百货的。现在&#xff0c;如果问京东是做什么的&#xff0c;相信大家的回答不在是…...

读论文alexnet:ImageNet Classification with Deep Convolutional Neural Networks

https://zhuanlan.zhihu.com/p/13694329885 1, 公式 卷积层输出尺寸&#xff1a; o ⌊(i 2p - k) / s⌋ 1 式中&#xff0c;i:输入尺寸&#xff1b;o:输出尺寸&#xff1b;p:padding&#xff1b;k: kernel_size&#xff1b;s: stride。⌊…⌋表示向下取整。 2, 推导过程 …...

操作系统|| 虚拟内存页置换算法

题目 写一个程序来实现 FIFO 和 LRU 页置换算法。首先&#xff0c;产生一个随机的页面引用序列&#xff0c;页面数从 0~9。将这个序列应用到每个算法并记录发生的页错误的次数。实现这个算法时要将页帧的数量设为可变。假设使用请求调页。可以参考所示的抽象类。 抽象类&…...

AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)

1 安装模块 魔塔社区提供了下载的模块&#xff0c;如下&#xff1a; pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple 2 模型下载 from modelscope import snapshot_download model_dirsnapshot_download(LLM-Research/Meta-Llama-3-8B,cache_dirrD:\…...

常见面试题

1.stringbuffer和stringbuilder的区别&#xff0c;stringbuffer是通过什么实现线程安全的? StringBuffer 和 StringBuilder 都是用于处理可变字符串的类&#xff0c;但它们的主要区别在于 线程安全性。 StringBuffer 的线程安全是通过方法加锁&#xff08;synchronized&…...

【视觉任务】深度估计(Depth Estimation)介绍(2025年更新)

文章目录 1. 任务定义与意义2. 按输入类型的分类2.1 单目深度估计&#xff08;Monocular Depth Estimation&#xff09;2.2 双目与多视图深度估计&#xff08;Stereo / Multi-view&#xff09;2.3 深度相机输入&#xff08;RGB-D&#xff09;2.4 主动与被动方法 3. 核心方法概述…...

Python 在Excel单元格中应用多种字体样式

文在数据处理和报表生成场景中&#xff0c;Excel 文件的格式设置至关重要。合理的字体格式不仅能提升表格的可读性&#xff0c;还能突出关键数据。本文将详细介绍如何使用免费库Free Spire.XLS for Python&#xff0c;在 Excel 单元格中灵活应用多种字体格式&#xff0c;包括字…...

C++:字符串操作函数

strcpy() 功能&#xff1a;把一个字符串复制到另一个字符串。 #include <iostream> #include <cstring> using namespace std;int main() {char src[] "Hello";char dest[10];strcpy(dest, src);cout << "Copied string: " << …...

Spark,SparkSQL操作Mysql, 创建数据库和表

SparkSQL操作Mysql 1.查看系统内是否有mysql [roothadoop100 ~]# rpm -aq | grep mariadb mariadb-libs-5.5.68-1.el7.x86_64 2.想我上面输出了有结果的即证明有&#xff0c;使用下列命令删除即可 [roothadoop100 ~]# rpm -e --nodeps mariadb-libs 3.进入我们常用存放压缩包…...

降低学习成本,1 天掌握 Java 开发核心技能

在当今数字化浪潮中&#xff0c;Java 编程语言凭借其卓越的跨平台性与稳定性&#xff0c;在企业级系统搭建、移动端应用开发以及大数据处理等领域占据着举足轻重的地位。但不可忽视的是&#xff0c;Java 开发链条冗长&#xff0c;从需求剖析到代码落地的全流程充满挑战&#xf…...

类模板的简单实例

author: hjjdebug date: 2025年 05月 16日 星期五 15:06:00 CST description: 类模板的简单实例 文章目录 1.实例代码:2. 模板类写法2.1 模板类的构造函数.2.2 模板类中的语句 3. 模板类的实例化过程.3.1 实例化的进一步试验. 4. 怎样调试constexpr 修饰的函数&#xff1f; 类模…...

描述性统计图表

一、核心图表类型与用途 1、直方图(Histogram) (1)定义:用连续矩形表示数据分布,横轴为数据区间,纵轴为频数或频率。 (2)用途:展示数据分布形态(对称、偏态)、识别离群值。 (3)适用场景:分析连续型变量的分布特征,如收入分布、考试成绩分布。 2、箱线图(Box P…...

【Golang笔记01】Goland基础语法规则

Golang笔记&#xff1a;快速学习Golang基础语法规则 一、基础语法 1.1、环境安装 第一步需要安装go的运行环境&#xff0c;从官网下载安装包&#xff1a;https://golang.google.cn/dl/。 第二步需要安装go的开发工具&#xff0c;可以使用vscode、goland。这里推荐使用golan…...

STM32 ADC+DMA+TIM触发采样实战:避坑指南与源码解析

知识点1【TRGO的介绍】 1、TRGO的概述 TRGO&#xff1a;Trigger Output&#xff08;触发输出&#xff09;&#xff0c;是定时器的一种功能。 它可以作为外设的启动信号&#xff0c;比如ADC转换&#xff0c;DAC输出&#xff0c;DMA请求等。 对于ADC来说&#xff0c;可以通过…...

Gmsh 读取自定义轮廓并划分网格:深入解析与实践指南

一、Gmsh 简介 (一)Gmsh 是什么 Gmsh 是一款功能强大的开源有限元网格生成器,广泛应用于工程仿真、数值模拟以及计算机图形学等领域。它为用户提供了从几何建模到网格划分的一整套解决方案,能够有效处理复杂几何形状,生成高质量的二维和三维网格,满足多种数值方法的需求…...

Elasticsearch/OpenSearch 中doc_values的作用

目录 1. 核心作用 2. 适用场景 3. 与 index 参数的对比 4. 典型配置示例 场景 1&#xff1a;仅用于聚合&#xff0c;禁止搜索 场景 2&#xff1a;优化大字段存储 5. 性能调优建议 6. 底层原理 doc_values 是 Elasticsearch/OpenSearch 中用于优化查询和聚合的列式存储结…...

如何在 Windows 10 或 11 上使用命令提示符安装 PHP

我们可以在 Windows 上从其官方网站下载并安装 PHP 的可执行文件,但使用命令提示符或 PowerShell 更方便。 PHP 并不是一种新的或不为人知的脚本语言,它已经存在并被全球数千名网络开发人员使用。它以开源许可并分发,广泛用于 LAMP 堆栈中。然而,与 Linux 相比,它在 Wind…...

SZU 编译原理

总结自 深圳大学《编译原理》课程所学相关知识。 文章目录 文法语法分析自顶向下的语法分析递归下降分析LL(1) 预测分析法FIRST 集合FOLLOW 集合 文法 乔姆斯基形式语言理论&#xff1a; 表达能力&#xff1a;0型文法 > 1型文法 > 2型文法 > 3型文法。 0 型文法&am…...

灌区量测水自动化监测解决方案

一、方案背景 随着社会发展和人口增长&#xff0c;水资源需求不断增大。我国水资源总量虽然丰富&#xff0c;但时空分布不均&#xff0c;加之农业用水占比大且效率偏低&#xff0c;使得水资源短缺问题日益凸显。农业用水一直是我国的耗水大户&#xff0c;占全部耗水总量的60%以…...

CVE-2017-8046 漏洞深度分析

漏洞概述 CVE-2017-8046 是 Spring Data REST 框架中的一个高危远程代码执行漏洞&#xff0c;影响版本包括 Spring Data REST < 2.5.12、2.6.7、3.0 RC3 及关联的 Spring Boot 和 Spring Data 旧版本。攻击者通过构造包含恶意 SpEL&#xff08;Spring Expression Language&…...

1基·2台·3空间·6主体——蓝象智联解码可信数据空间的“数智密码”

近日&#xff0c;由全国数据标准化技术委员会编制的《可信数据空间 技术架构》技术文件正式发布&#xff0c;标志着我国数据要素流通体系向标准化、规范化迈出关键一步。该文件从技术功能、业务流程、安全要求三大维度对可信数据空间进行系统性规范&#xff0c;为地方、行业及企…...

MySQL的存储过程

这一部分比较重要&#xff0c;加油&#xff01;&#xff01;&#xff01;部分代码忘记保存了&#xff0c;嘻嘻&#xff0c;练习代码在最后&#xff0c;大家共勉&#xff01;&#xff01;&#xff01; 通俗来讲&#xff0c;视图是死的&#xff0c;但是这个可以根据传入的参数不同…...

spring学习->sprintboot

spring IoC(控制翻转): 控制:资源的控制权(资源的创建&#xff0c;获取&#xff0c;销毁等) 反转:和传统方式不一样(用上面new什么)&#xff0c;不用new让ioc来发现你用什么&#xff0c;然后我来给什么 DI:(依赖注入) 依赖:组件的依赖关系。如newsController依赖NewsServi…...

如何排查阻塞语句

文章目录 文档用途详细信息 文档用途 查询阻塞当前sql的语句&#xff0c;并结束阻塞语句。 详细信息 1、通过pg_stat_activity视图和pg_blocking_pids函数查找阻塞sql。 highgo# select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query from pg_stat_activity…...

TIP-2021《SRGAT: Single Image Super-Resolution With Graph Attention Network》

推荐深蓝学院的《深度神经网络加速&#xff1a;cuDNN 与 TensorRT》&#xff0c;课程面向就业&#xff0c;细致讲解CUDA运算的理论支撑与实践&#xff0c;学完可以系统化掌握CUDA基础编程知识以及TensorRT实战&#xff0c;并且能够利用GPU开发高性能、高并发的软件系统&#xf…...

【AI学习】AI大模型技术发展研究月报的生成提示词

AI大模型技术发展研究月报生成提示词 请输出AI大模型技术发展研究月报&#xff0c;要求如下&#xff1a; —————————— 任务目标 在今天&#xff08;{{today}}&#xff09;往前连续 30 天内&#xff0c;检索已正式公开发表的、与AI大模型&#xff08;参数量 ≥10B&am…...

深入理解 Git 分支操作的底层原理

在软件开发的世界里&#xff0c;Git 已经成为了版本控制的标配工具。而 Git 分支功能&#xff0c;更是极大地提升了团队协作和项目开发的效率。我们在日常开发中频繁地创建、切换和合并分支&#xff0c;但是这些操作背后的底层原理是怎样的呢&#xff1f;在之前的博客探秘Git底…...

泰迪杯特等奖案例深度解析:基于多模态融合与小样本学习的工业产品表面缺陷智能检测系统

(第九届泰迪杯数据挖掘挑战赛特等奖案例全流程拆解) 一、案例背景与核心挑战 1.1 工业质检痛点分析 在3C电子、汽车零部件等高端制造领域,产品表面缺陷(划痕、凹陷、氧化等)检测是质量控制的核心环节。传统人工目检存在效率低(平均检测速度3秒/件)、漏检率高(约15%)…...

Go语言爬虫系列教程 实战项目JS逆向实现CSDN文章导出教程

爬虫实战&#xff1a;JS逆向实现CSDN文章导出教程 在这篇教程中&#xff0c;我将带领大家实现一个实用的爬虫项目&#xff1a;导出你在CSDN上发布的所有文章。通过分析CSDN的API请求签名机制&#xff0c;我们将绕过平台限制&#xff0c;获取自己的所有文章内容&#xff0c;并以…...

轨道炮--范围得遍历,map巧统计

1.思路很难想&#xff0c;但代码一看一下就明白了&#xff0c;就是模拟时间&#xff0c;map存起来遍历也不受10*6影响 2.每次先统计点对应的直线&#xff0c;再动这个点&#xff0c;map一遍历实时更新ma统计max&#xff0c;AC!!!! https://www.luogu.com.cn/problem/P8695 #i…...

python中集合的操作

Python中的集合&#xff08;Set&#xff09;是一种无序、可变且元素唯一的数据结构&#xff0c;主要用于去重和数学运算。以下是核心操作分类&#xff1a; ‌1. 集合创建‌ 大括号创建&#xff1a;s {1, 2, 3}&#xff08;空集合必须用set()&#xff09;构造函数&#xff1a…...

常见激活函数——作用、意义、特点及实现

文章目录 激活函数的意义常见激活函数及其特点1. Sigmoid&#xff08;Logistic 函数、S型函数&#xff09;2. Tanh&#xff08;双曲正切函数&#xff09;3. ReLU&#xff08;Rectified Linear Unit修正线性单元&#xff09;4. Softmax5. Swish&#xff08;Google 提出&#xff…...

FC7300 Trigger MCAL配置引导

FC7300包含4个触发器选择(TRGSELs)。详细的连接信息将在章节中描述。Trigger Select (TRGSEL)源。TRGSEL模块允许软件为外设选择触发器源。   TRGSEL提供了一种极其灵活的机制,用于将各种触发器源连接到多个引脚/外设。   在TRGSEL中,每个控制寄存器最多支持4个输出触…...

组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果

组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 1.flutter创建项目并运行 flutter create fluter_hmrouter 进入ohos目录打开编辑器先自动签名 编译项目-生成签名包 flutter build hap --debug 运行项目 HMRouter搭建安装 1.安…...

WAS和Tomcat的对比

一、WAS和Tomcat的对比 WebSphere Application Server (WAS) 和 Apache Tomcat 是两款常用的 Java 应用服务器&#xff0c;但它们有许多显著的区别。在企业级应用中&#xff0c;它们扮演不同的角色&#xff0c;各自有其特点和适用场景。以下是它们在多个维度上的详细对比&…...