一种基于微信引擎的navmesh寻路方法及系统技术方案

技术编号:39001245 阅读:9 留言:0更新日期:2023-10-07 10:33
本发明专利技术涉及计算机应用的技术领域,尤其是涉及微信引擎(微信开发者工具小游戏版)及基于此的navmesh自动寻路办法。此寻路方法包括以下步骤:S10:使用unity生成障碍物信息,解析并简化网格,构建网格邻接关系后,导出行走区域,生成json文件;S20:运行微信工程,读取导出的json文件,解析生成完整网格、网格替换数据、网格连通域、BV树、跳点数据,并检测错误网格;S30:通过A*算法与漏断算法求得路径移动的结果,通过射线检测获取摇杆移动的结果;S40:通过可视化绘制工具检查网格并调试,本地检查无误后交由测试人员测试。本发明专利技术运行稳定、性能良好、调试方便,可简化开发人员的工作,并完善玩家的游戏体验。玩家的游戏体验。

【技术实现步骤摘要】
一种基于微信引擎的navmesh寻路方法及系统


[0001]本专利技术涉及计算机应用的
,尤其是涉及微信开发者工具(小游戏版)及基于此的navmesh自动寻路办法。

技术介绍

[0002]寻路是重度游戏中非常重要的功能,针对不同的项目需求衍生出Navmesh、向量场、格子寻路等不同方案。
[0003]由于游戏中寻路频率高、寻路计算量大、客户端与服务端同步难度大,因此对寻路方案的可靠性、易用性、运算性能都有很严格的要求。国内外都对寻路的算法做出了研究。在各种方案中,最为泛用的是Navmesh,Unity和UE两大游戏引擎都选择Navmesh作为内置寻路模块。中小型项目使用引擎内置的Navmesh即可满足需求。而对于大型项目,内置的Navmesh存在性能瓶颈,且难以满足项目的特殊需求。因此许多公司会实现自己的Navmesh,或使用其他更具针对性的寻路方案。
[0004]自2017年问世以来,微信小游戏主流游戏类型为轻度游戏,大部分不需要寻路功能,因此微信也没有内置寻路模块。而近几年,微信小游戏在朝精品化、长期化、优质化的方向发展,越来越多开发者尝试在微信平台研发重度游戏。因此开发者们急需一套通用、高效、稳定的寻路方案。
[0005]开发微信小游戏过程中,开发者无法引入预编译的C++库文件,必须使用基于JavaScript的脚本语言。并且微信小游戏对于性能非常敏感。因此本项目基于对微信小游戏的特殊性,开发出一套特殊的Navmesh寻路方案,使用脚本语言也可以快速地计算出寻路结果,并实现跳点、动态障碍物等功能。

技术实现思路

[0006]本专利技术的目的一是提供一种可以应用在微信小游戏上的navmesh寻路方法及系统。
[0007]本专利技术的上述专利技术目的是通过以下技术方案得以实现的:一种基于微信开发者工具(小游戏版)的navmesh寻路方法,所述navmesh寻路方法包括以下步骤:S10:使用unity引擎打开相应客户端游戏地图,解析网格,简化去除冗余数据生成原网格;如地图存在障碍物,则解析配置表,生成障碍物后重复上述步骤,得到新网格,依据原网格与新网格的差异得到网格替换数据,构建网格邻接关系,导出行走区域,生成json文件,同时设置生成的json文件自动置于微信工程目录下;S20:运行微信工程,读取导出的json文件,求网格连通域,并分别生成BV树,解析跳点数据,检测错误网格,完成对网格数据的解析,并根据配置或运行逻辑动态生成障碍物几何体;S30:运行小游戏版游戏,点击进行地图选点,运行路径移动逻辑,选定起点与终
点,通过寻路算法确定路径;推动游戏虚拟摇杆,运行摇杆移动逻辑,以摇杆方向为基准,定期与网格和障碍物几何体做射线相交检测,判定当前方向是否可走,可走则向摇杆方向移动;S40:如网格存在错误或移动出现异常,则需通过navmesh、障碍物、邻接关系,bv树可视化绘制等可视化方法进行调试,本地测试无误后,提交至微信开发者工具并编译,交由测试人员进行bug测试。
[0008]通过采用上述技术方案,可通过根据不同导出场景,灵活选择地图数据导出方案,从unity引擎中导出包含障碍物信息的地图json数据,并使用微信开发者工具(小游戏版)进行解析运算。并且可使用配套开发的可视化调整工具,使策划人员或美工人员等不懂研发的人员在对开发中的游戏软件进行修改后,能够第一时间预览到数据更新的效果,无需通过将数据更新内容通过研发人员开发出来,就能够及时快速对有误的地图数据进行修改,游戏上线以来运行稳定,没有收到构建错误或路径错误的报告。同时本项目对开发者友好,实现了大部分的标准navmesh的接口,并有完善的自动检测,以及大量调试功能用于排查问题。使手机游戏的微信小游戏版可以承载更多功能,提高产品的竞争力。
[0009]在以轻度游戏为主流的微信小游戏中,本项目实现了重度MMORPG必不可少的寻路功能,提高了产品在微信平台的竞争力。并且该项目不局限于微信引擎,可以迁移至其他任何支持Javascript做脚本的游戏引擎中,未来的市场前景广阔。
[0010]本专利技术进一步设置为:在步骤S30中,通过以下方法计算路径移动的结果:S31.1:依据网格替换数据,启用和禁用部分网格,并重新构建BV树,根据BV树求合法输入点坐标;S31.2:使用A*算法求网格集合,并将跳点视为临接关系的一部分来实现分离网格连接;S31.3:使用漏斗算法依据网格几何求得最终路径;本专利技术进一步设置为:在步骤S30中,通过以下方法计算摇杆移动的结果:S32.1:依据网格替换数据,启用和禁用部分网格,并重新构建BV树,根据BV树求合法输入点坐标;S32.2:以输入点为起点,以摇杆方向为射线方向,做射线检测:通过BV树寻找与输入点接近的网格,求得射线方向网格的最近交点。
[0011]S32.3:判断交点与起点的距离关系:如果交点与起点足够远则直接采用该方向作为移动方向;否则向两侧65
°
方向做多次射线检测,用二分法求得最小可行走角度;如仍不能找到可走方向,则停留在原地。
[0012]通过采用上述技术方案,可快速求得行走路径、计算移动方向。
[0013]本专利技术进一步设置为:步骤S40包括:S41:navmesh、障碍物、邻接关系、bv树可视化绘制;S42:模拟创建/销毁障碍物;S43:A*和漏斗算法的中间数据可视化绘制;S44:自动寻路测试,记录数据,上传数据,寻路数据可视化绘制。
[0014]通过采用上述技术方案,通过自行开发的最具适配性的多种可视化调整工具,可以使研发人员快速对错误的网格进行最迅速的对比和调整,进而能够提升研发的效率。
[0015]本专利技术目的二为提供一套高效可靠的障碍物处理方法与系统。在上述技术方案的基础上,进一步设置为:添加和销毁动态障碍物功能,修改路径移动和摇杆移动的结果。
[0016]通过采用上述技术方案,可以对地图数据中的障碍物设置合理的处理逻辑,使游戏人物在自动寻路时,用恰当的方式避开地图上比如建筑物等障碍物,达成特定游戏玩法。障碍物数据通过预计算生成,降低运行时计算开销与功率消耗,提升画面流畅感,有利于提升用户的使用体验。
[0017]本专利技术的上述专利技术目的二是通过以下技术方案得以实现的:一种基于微信开发者工具(小游戏版)的navmesh障碍物处理系统:解析网格模块,用于解析Unity的网格,解析配置表,生成障碍物数据并根据该数据构建新网格,记录网格的差异数据到导出的json文件中;障碍物生成模块,运行时依据障碍物的生成与销毁,替换对应的网格数据。对应特定地图,创建障碍物几何体用于射线检测时的交互;检测模块,用于检测新网格数据中的错误,并将错误上报后台;可视化调试模块,用于将navmesh、障碍物、邻接关系和树可视化绘制,模拟创建和销毁障碍物,直观便捷地调试新网格,将寻路数据可视化绘制。
[0018]通过采用上述技术方案,通过与标准navmesh通过销毁重构部分网格来实现障碍物不同的,使用预生成差异网格数据的方法,大幅提高从unit本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于微信引擎的navmesh寻路方法,其特征在于,所述navmesh寻路方法包括以下步骤:S10:使用unity引擎打开相应客户端游戏地图,解析网格,简化去除冗余数据生成原网格;如地图存在障碍物,则解析配置表,生成障碍物后重复上述步骤,得到新网格,依据原网格与新网格的差异得到网格替换数据,构建网格邻接关系,导出行走区域,生成json文件,同时设置生成的json文件自动置于微信工程目录下;S20:运行微信工程,读取导出的json文件,求网格连通域,并分别生成BV树,解析跳点数据,检测错误网格,完成对网格数据的解析;S30:运行小游戏版游戏,点击进行地图选点,运行路径移动逻辑,选定起点与终点,通过寻路算法确定路径;推动游戏虚拟摇杆,运行摇杆移动逻辑,以摇杆方向为基准,定期做射线检测判定当前方向是否可走,可走则向摇杆方向移动;S40:如网格存在错误或移动出现异常,则需通过navmesh、障碍物、邻接关系,bv树可视化绘制等可视化方法进行调试,本地测试无误后,提交至微信开发者工具并编译,交由测试人员进行bug测试。2.如权利要求1所述的navmesh寻路方法,其特征在于,在步骤S30中,通过以下方法计算路径移动的结果:S31.1:根据BV树求合法输入点坐标;S31.2:使用A*算法求网格集合,并将跳点视为临接关系的一部分来实现分离网格连接;S31.3:使用漏斗算法依据网格几何求得最终路径。3.如权利要求1所述的navmesh寻路方法,其特...

【专利技术属性】
技术研发人员:徐白鹿
申请(专利权)人:广州小丑鱼信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1