2d游戏开发工具链分析

前言

博客内容为自身经验总结,并非调查分析结论

美术设计

  1. ps: 使用广泛,基本每个美术都会使用
  2. fgui: 用于游戏素材转化为游戏 ui,支持 cocos unity 甚至网页,如未来有迁移引擎需求优先选用
  3. spine: 用于设计人物动作和一些技能特效,支持 cocos unity 等, 使用容易

游戏配置表工具

  1. 简单 json: 简单基本所有语言都支持解析和生成
  2. luban: 功能强大,配置自定义模版和 tag 功能可以很方便的进行改造, 并支持常见多种编程语言和二进制格式配置

客户端

  1. cocos creator2.x
    优点: 使用简单,容易掌握,但可能教程零散初学者不容易进阶, 只能开发 2d 项目, 适合开发微信小游戏,字节小游戏等, 开源
    缺点: 自带功能不足, 初学者可能不容易找齐需要等东西

  2. cocos creator3.x
    优点: 具有 2 的优点, 同时有官方不断维护添加新特性, 具有更多和批的 api 等, 支持较中轻度 3d 游戏开发, 开源
    缺点: 和 2 代开发模式和 api 上有变化,需要重新上手

  3. unity
    优点: 功能齐全, 插件丰富, 教程丰富, 可开发的游戏范围广, api 稳定预料之外的情况少
    缺点: 上手比 cocos 困难, 思维模式偏程序有些功能不符合直觉, 需要账号许可证, 个人账号公司使用会被封等

服务端

  1. php
    优点: 语法简单,对于有 web 经验的人可以把公告,账号登陆,后台管理,活动页面等功能全部包办,成本低
    缺点: 对象内存占用较大, 处理大量对象或者大数组时容易瓶颈, 需要借助 workerman swooole 等扩展库实现常驻服务才能有足够性能

  2. nodejs
    优点: 可用库极多,并且生态庞大, 全异步编程网络性能高, 调试容易, 有内存分析工具, 可以和客户端复用代码,例如普洱 ts 开发 unity, 此时两边都是 ts 执行环境
    缺点: 弱类型,不熟悉时进行数值计算容易产生类似 NaN Infinite 等奇怪结果, 各种 js ts 配置纷飞 es6 esNext tsconfig 等等, 打包调试需要一定实践

  3. go
    优点: 一般情况性能比脚本高,并发编程轻松, 强类型心智负担会小点, 打包发布容易,也比较容易打包成库供客户端复用逻辑, 包隔离解耦彻底
    缺点: 处理循环引用的方式太暴力导致编写业务代码速度慢, 不太适合快速迭代的业务需求

游戏框架

  1. Pinus: 历史悠长的一个框架
  2. Colyseus: 有房间管理, 状态缓存, 状态同步客户端等功能, 适合有大厅有匹配的游戏类型, ts 编写容易和客户端集成
  3. Nakama: 社区庞大, go 为开发语言,支持 js lua 等作为脚本语言
  4. tsrpc: ts 语言,可能很好的很全 ts 的前后端协作,自带类似 proto 的运行时类型检查

数据存储

  1. mysql
    优点: 功能齐全, 拥有事物处理功能, 程序开发和运维方便
    缺点: 开发人员流动大或设计水平不足时,会导致表关系难以维护扩展和性能问题, 一般总读写超过 5k/s 已经容易出现性能问题, 可能结算奖励的一波写入就卡顿了, 集群需要改动

  2. redis
    优点: 速度极快, 除非出现循环嵌套遍历, 一般没有性能问题, 总读写 20w/s 以上, 阻塞读写也有 5k/s 以上, 集群简便
    缺点: 不支持范围查询和临时调整索引,涉及条件查询时需要将相关数据全部取出在程序里筛选, 全内存化用户流失后数据不好迁移到硬盘上成本较高

  3. mongodb(了解不多)
    优点: 功能丰富,集群容易, 速度够用
    缺点: 数据较少时(少于 50g)价格较贵,机器配置要求高, 市场上掌握的人员相对较少

  4. 其他 NoSql 数据库(了解不多)
    360pika: 使用历史和范围较大的国内开源项目, 支持 redis 协议,数据冷热分离,比 redis 有更多的运维命令
    rocksdb: c++写成,是很多其他 NoSql 的底层实现, 业务使用需要理解的细节较多,不太推荐
    kvrocks: rocksdb 的一种封装实现,支持 redis 协议, 有基金会维护
    Tendis: rocksdb 的一种封装实现, 支持 redis 协议, 已经不活跃
    ScyllaDB: 新星数据库, 被知名公司例如 discord 使用,类 sql 的语法