主题:通过一个小需求,讲解如何开发基于 Unity 的测试工具
测试中,进行 GM 作弊测试时,需要自己在聊天频道输入各种作弊指令,每次输入需要查看指令文档,不方便。
在 Unity 中开发一个集成大多数 GM 指令的界面工具
1.c# 基础知识
2.unity 基础知识,涉及到的主要类:EditorWindow
3.游戏框架代码,涉及到的主要类:主运行程序、通信类、协程相关
在\Assets\Editor 文件夹下新建一个类(TestTool),该类继承自 EditorWindow,还需要引用 UnityEditor 命名空间。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
namespace Assets.Editor.QATools
{
public class TestTool : EditorWindow
{
//下面这个特性是在Unity的工具栏的入口
[MenuItem("GStore/QA测试工具/作弊测试工具")]
static void ShowWindow()
{
EditorWindow.GetWindow(typeof(TestTool), true, "作弊测试工具");
}
string str_cmd = "";
GUIStyle style_red = new GUIStyle("Button");
GUIStyle style_green = new GUIStyle("Button");
private void Awake()
{
//颜色字体样式
style_red.normal.textColor = Color.red;
style_green.normal.textColor = Color.green;
}
void OnGUI()
{
GUILayout.Space(10f);
GUILayout.BeginHorizontal();
{
//GUILayout.Label 文本显示
GUILayout.Label("作弊指令:", GUILayout.Width(50f));
//文本字段
str_cmd = GUILayout.TextField(str_cmd, GUILayout.ExpandWidth(true));
}
if (GUILayout.Button("提交", GUILayout.ExpandWidth(true)))
{
SubmitCmd(str_cmd);
}
GUILayout.EndHorizontal();
GUILayout.Space(10f);
GUILayout.BeginHorizontal();
if (GUILayout.Button("加道具", style_red, GUILayout.ExpandWidth(true)))
{
SubmitCmd("additem 10101 1");
}
if (GUILayout.Button("批量加道具", style_green,GUILayout.ExpandWidth(true)))
{
ArrayList list_cmds = new ArrayList()
{
"additem 10101 1",
"additem 10102 1"
};
//请使用游戏中的全局携程
//XXXXX.StartCoroutine(ExecuteCmds(list_cmds));
}
GUILayout.EndHorizontal();
}
/// <summary>
/// 批量执行GM指令
/// </summary>
/// <param name="invincible">作弊指令列表</param>
/// <returns></returns>
public IEnumerator ExecuteCmds(ArrayList list_cmds)
{
foreach (string cmd in list_cmds)
{
SubmitCmd(cmd);
yield return new WaitForSeconds(1);
}
}
/// <summary>
/// 发送作弊指令给服务器
/// </summary>
/// <param name="cmd">作弊指令</param>
void SubmitCmd(string cmd)
{
//调游戏代码
}
}
}
一般我们只要使用 Button、TextField、Label 等就可以实现我们的测试工具。
更多的方法可以查看 Unity 手册:http://docs.manew.com/Script/index.htm
下拉框、单选框等等看上面的资料就行了,都有例子。
作弊指令工具,主要需要操作策划配置文档,自动读取数据。通过开发的工具可以省去自己去查找数据的时间。
如下面的例子:给所有英雄加亲密度
方法一:读配置表,获取所有英雄。
/// <summary>
/// 添加所有英雄的亲密度
/// </summary>
/// <returns></returns>
private IEnumerator TestAddHeroIntimacy()
{
Dictionary<ulong, CSVHero> dict_heros = CSVHero.GetAllDic();
string cmdCode = "";
foreach (var item in dict_heros)
{
if (item.Value.hero_id > 1000)
{
cmdCode = string.Format("addHeroIntimacy {0} {1}", item.Value.hero_id, 100000);
yield return new WaitForSeconds(2);
SendCheatCode(cmdCode);
}
}
}
方法二:直接调游戏代码,获取所有英雄。
示例:略。
例如通过 Button 调用我们写好的 Python 脚本等。
例如数据检查脚本等等。
内嵌到 Unity 的测试工具,直接使用客户端部分代码,个人认为可以降低开发测试工具的开发难度,提高测试工具的使用率和效率。