一场竞技游戏,我们在这里稍微划分一下,将其分为局外界面和局内战斗。举个例子,比如LOL,在大厅、组队、选英雄界面这些都是局外界面。当我们等待读完长长的进度条,进入到游戏,听到"咚咚咚咚咚"的声音后英雄出现到我们眼前,这个时候,你就已经到了局内战斗的部分里了,也就是我们今天要讨论的内容。
1. 概述
本文主要对局内战斗的自动化测试进行讲解。包含如何实现战斗自动化的流程和脚本运行本身框架进行介绍,读者应具备一些python的编程经验和UI自动化的开发经验。
对于游戏的UI自动化这里采用poco的unitysdk形式进行实现。稍微介绍一下poco。这是一个类似appium的客户端UI自动化框架,利用界面元素来进行UI自动化操作。
官方文档:
https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/integration.html
元素来源于UITree,UITree源于接入unitysdk的游戏客户端。通过与外部挂载agent进行socket通信,从而将使用unity引擎游戏的UITree返回给外部供自动化相关。
UITree里面包含对应Tree中元素的所有属性信息,其中包含元素的position属性(位置信息),这也是我们得以锁定对应元素进行操作的核心依据。
通过pocosdk获取游戏客户端UI层信息,对UI信息中的具体内容做对应处理。
最后反馈对应数据给AI,由AI进行对应决策,将决策信息返回给本地后执行对应的UI自动化操作代码,从而完成决策,通过大量决策的实施,完成整局的实时操作。
再引入多轮重开检测机制,进而完成局内战斗的自动化对战。
一些简单的演示:
在unity项目中,需要在unity中安装Poco的SDK
Poco调用方法
import time
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco('btn_start').click()
time.sleep(1.5)
shell = poco('shell').focus('center')