在游戏领域,行为树是常用的AI解决方案,用行为树可以快速明了地描述AI的行为模型,而UE4提也供了非常完善的行为树解决方案,不仅有用户友好的界面,而且也有多样化的底层支持。在官网的行为树快速入门指南中,我们可以了解到UE4行为树编辑器的使用以及用蓝图创造行为树节点的方式,而在一些特定的需求当中,蓝图相对于C++并不会非常灵活。因此,笔者稍微研究了下行为树C++层次中的内容,简单分享下行为树里各种节点的C++写法
首先上一张行为树完整图,是基于场景查询系统(EQS)快速入门制作的:
在游戏领域,行为树是常用的AI解决方案,用行为树可以快速明了地描述AI的行为模型,而UE4提也供了非常完善的行为树解决方案,不仅有用户友好的界面,而且也有多样化的底层支持。在官网的行为树快速入门指南中,我们可以了解到UE4行为树编辑器的使用以及用蓝图创造行为树节点的方式,而在一些特定的需求当中,蓝图相对于C++并不会非常灵活。因此,笔者稍微研究了下行为树C++层次中的内容,简单分享下行为树里各种节点的C++写法
首先上一张行为树完整图,是基于场景查询系统(EQS)快速入门制作的:
在手游时代,尤其对于大世界游戏而言,寻路的实现基本在专门的寻路服务器上进行。在众多寻路的解决方案中,recastnavigation是最为经典实用的一个,很多游戏甚至游戏引擎都采用类似的实现。recastnavigation项目自带了RecastDemo,用图形化的界面帮助用户认识寻路网格(navmesh)的生成以及寻路的过程。因此,作为初学者的笔者,也决定通过RecastDemo去初步认识寻路的机理奥秘。
首先克隆recastnavigation项目,从文档中可以看到RecastDemo的构建支持Windows、Linux、MacOS三端。从实际测试的效果来看,MacOS可能存在字体无法加载的问题,建议是用Windows跟Linux跑着玩。以Windows为例,首先需要下载premake5以及SDL开发库VC。premake5需要放到PATH
下,而SDL开发库VC解压后需要按照文档描述,放到recastnavigation项目目录的RecastDemo/Contrib
目录下,更名为SDL
。
之后,在RecastDemo
目录下执行premake5 vs2019
,可以在RecastDemo/Build/vs2019
中看到recastnavigation.sln
项目文件。用VS2019打开,构建RecastDemo,就会生成exe在RecastDemo/Bin
目录下。进入这个目录执行RecastDemo.exe
,就能打开工具界面了。
在测试工具的开发过程中,可能会遇到需要生成excel文件的需求。笔者在自研excel-diff工具的过程中,也同样接到了需要生成excel文件来展示每个sheet的diff数据。每个包含diff的sheet需要生成1个excel文件,每个文件分成3个sheet,2个sheet用于展示sheet原先的数据与修改后的数据,1个sheet用于描述性统计和超链接每个diff的情况。要生成这样的excel文件,不用专门的excel库是不行的。基于python的技术栈,经过一番调研,笔者采用openpyxl作为生成excel的库,并且顺利完成了需求。
学习openpyxl可以直接从官方文档入手。一些基本操作如下:
在python开发期间,由于GIL的原因,不能直接采用并行的方式处理代码逻辑。在multiprocessing库的支持下,python程序能够启动子进程执行特定的任务,但子进程的管理也成为了问题。为了简化用户开发成本,python在concurrent.futures下内置了ProcessPoolExecutor这一数据结构,实现了简单的进程管理及任务调度。如果没有特别的需求,开发者只需要用ProcessPoolExecutor即可实现并行执行任务。因此,本文简单对ProcessPoolExecutor的实现进行分析,帮助大家更加了解python开发中进程/任务调度的一种方式。
首先来看ProcessPoolExecutor的用法,可以参考官方文档
可以看到用法非常简单,用户一侧只需要这样操作即可得到任务执行结果:
golang的数据类型转换是困惑新gopher的一大问题之一。相对于python,golang的数据类型转换可要麻烦的多,而且还不走寻常路地诞生了些新的方法跟名词。因此本文讲解golang常见数据类型string、int、rune等数据类型相互之间的转换方法,给大伙儿避坑。
在讲述方法之前,首先非常有必要讲下go源码对这些数据类型的表述:
UE4在构建场景光照时,会启动swarm agent
进行构建,但如果只用一台电脑会出现构建速度较慢的情况。为了加快编译的效率,需要配置联机渲染。
首先需要注意的是,在UE4中自动打开swarm agent
和手动打开swarm agent
会用到不同的配置。因此,建议的方法是手动打开swarm agent
进行配置(对于所有机器),然后再开UE4。每个swarm agent
以及调度器swarm coordinator
的可执行文件位置,都在引擎的Engine\Binaries\DotNET
下
在官方文档中,有Unreal Swarm
配置的例子可以参考。假设你有一台性能强劲的机子,和一台你日常工作但性能一般般的机子。这样可以如下配置:
许多游戏,尤其是MMO,会包含“副本”这个概念,玩家通过打副本从而获得物品奖励及属性收益。通常来讲,单个游戏所涉及的副本数量/品种较多,因此在游戏测试过程当中,很难一次性全部遍历完所有副本的流程与玩法。为了解决这个问题,可以通过自动化测试的方式去冒烟副本玩法流程、检查奖励。为了让自动化测试用例执行更加稳定且易于维护,需要一套通用的逻辑模版去实现副本玩法自动化。自动化测试流程涉及多个部分,包括玩家账号的准备、副本的进入、副本流程、奖励检查,而本文主要考虑“副本流程”的实现。
副本玩法的机制可以如下描述:玩家在进入副本后,服务器会为玩家创建一个分线并让玩家执行切线操作切入副本内,而后下发副本信息,客户端则缓存信息,为玩家创建场景及指引,而后玩家根据指引游玩副本内的内容。每当玩家执行了特定的行为,比如走到指引的位置/干掉指引的怪物,就会触发这些指引绑定的触发器,触发器生效后,服务器就会同步触发出来的下一阶段的信息给到客户端,客户端便展示出下一阶段的指引,直到副本结束或者发生错误、意外退出为止。从副本机制可以看到,副本玩法的每一个步骤,在客户端中都有缓存相关的信息,在自动化的实现上,只需要每一个轮次读取副本信息,执行相关的行为即可(任务也是如此)。因此,我们可以设计如下的行为来自动跑副本:
excel-differ是游戏测试常用的测试工具。在有些业务场景下,excel-diff的结果可能需要通过web展示。Vue技术栈下的vxe-table表格组件能够支持大量数据的展示,因此可以用vxe-table展示excel-diff的结果。
excel-diff的算法本身,先前的文章已有讲解,在结果展示上会按file->sheet来分。为了让结果展示更加人性化,需要对表格的样式进行区分。在vxe-table的api列表中,我们可以通过cell-class-name
的回调函数指定每个单元格的样式。针对excel-diff的结果可以这样设计样式:
在射击类游戏中,不可避免地需要对各种枪械武器进行测试。大多数情况下,枪械种类繁多,人工遍历测试会花非常多的时间,因此引入自动化测试替代人力执行部分冒烟用例,能够增加严重问题提早发现的可能性。枪械测试包括基础行为、伤害、弹道、后坐力等方面,从功能冒烟的角度考虑,基础行为和伤害是需要优先覆盖的部分。因此,本文以UE4引擎下的枪械测试为例,讲解基础行为跟伤害测试的一些设计。