CliToolkit 工具

目标 & 背景

在游戏开发过程中,通常我们会为了更好的测试、校验逻辑正确性等,开发很多工具,最常见的就是 GM[^1] 指令,以及一些为运营同学开发的运营工具,如:发送邮件,开启活动等等

这样我们就可以将工具分为两大类

  • 游戏内建 GM 指令
    • 部分工具可以直接丢进 Unity Editor 开发
  • 运营工具(Web)

但是在实际开发过程中,我总是会碰到一些工具放在哪里都不合适,比如:正式服的 AB 差分上传工具、技能描述工具(帮助策划理解自己技能配置是否正确),为了解决这个问题,我在我们项目中引入了第三种工具分类,CliToolkit (已开源)

最初做技术选型时非常纠结,首先工具的开发必须使用 C#,这样组内任意其他开发人员都可以快速上手,而且开发成本要低,同时要提供相对便利的交互

基于上述原因,最后决定基于 Spectre.Console 设计了现有的 CliToolkit

实际业务展示

git 上已经展示了针对 YooAsset [^2] 的 Sftp 差分上传,这里展示我们项目中给策划开发的技能描述工具

iShot_2022-11-20_10.45.59

这里也是在 CliToolkit 的基础上,对游戏所有技能相关的配表,挨个增加了树形解释,整体开发成本很低,策划也很爱用

这里的技能系统设计,争取今年开几篇文章介绍一下

CliToolkit 设计思路

在设计时,主要考虑了如下内容:

  • 参数
    • 不同用户不同配置
    • 命令行透传参数
  • 运行模式
    • 手动模式
    • CI/CD 自动模式

参数

我们以 YooAsset[^2] 的差分工具为例,比如当前游戏中存在 A、B 两个渠道,每个渠道有自己的 CDN 资源服务器,那么此时上传的服务器配置也应当是两份,同时会有部分参数是需要通过命令行运行时 args 透传进行赋值的

为了解决这些问题,我们将参数分为 AutoConfigCommandSettings 两种,AutoConfig 用于存放不同渠道的 Sftp 配置,而 CommandSettings 用于存放 args 透传参数,如在 README 中介绍到的 --yooasset_local_dir 参数就是存放在 CommandSettings 中的

而不同渠道不同配置,在 CommandSettings 中有一个默认的 -u 参数,用于存放到底使用哪一个 Sftp 配置

所有需要外部传入的参数,都要增加缺省判断,如果没有配置,就需要手动输入

运行模式

利用 Spectre.Cli 库,来解决多种运行模式的问题

var app = new CommandApp();

app.SetDefaultCommand<MenuCommand>();

app.Configure(
    config =>
    {
        config.AddCommand<MenuCommand>("Menu");
        config.AddCommand<CliCommand>("Cli");
    }
);

return await app.RunAsync(args);

这里将手动模式标记为默认命令,这样就完成了多模式的区分

最后

希望 CliToolkit 能帮你在工具开发过程中提供一个新的解题思路

参考

[^1]: InGameDebugConsole https://github.com/yasirkula/UnityIngameDebugConsole

[^2]: YooAsset https://github.com/tuyoogame/YooAsset