一套完整的规范包含:代码规范、目录规范、协作流程、Code Review、自测标准、提交规范、禁止事项。
目标:
不冲突、好维护、BUG少、迭代快
一、代码规范
1. 命名规范
- 文件夹:小写 + 中横线
ui-common、game-battle - 脚本文件名:大驼峰
UIBag.ts、LevelCtrl.ts - 类名:大驼峰
class UIBag extends BaseView - 变量/方法:小驼峰
userData、openShop() - 常量:全大写+下划线
MAX_HP、ITEM_TYPE_COIN - 私有变量:开头加下划线
_updateView()、_timer - 枚举:
enum ItemType { COIN, GEM }
2. TypeScript 规范
- 必须开启严格模式:
"strict": true - 禁止使用
any(必须指定类型) - 函数必须写返回值类型
function add(a:number):number {} - 禁止魔法数字(所有固定值写常量)
- 接口/数据结构必须用
interface定义
3. 引擎使用规范
- 禁止使用
find()/getChildByName()
节点全部在@property中拖拽绑定 - 禁止场景上挂大量脚本
功能统一走预制体 + 管理器 - 禁止动态修改
layer - 禁止在
update里写复杂逻辑、查找节点 - 禁止大量
instantiate/destroy→ 必须用对象池 - 禁止跨模块直接引用 → 必须用事件/服务通信
4. 注释规范
- 公共方法必须写注释(功能、参数、返回值)
- 复杂逻辑块上方必须写注释
- 枚举/常量必须注释含义
- 不写废话注释,只写为什么这么做
二、目录结构规范
assets/
├── resources/ 动态资源
├── scenes/ 场景
├── prefabs/ 预制体
├── script/
│ ├── base/ 基类
│ ├── framework/ 框架
│ ├── game/ 游戏业务
│ ├── ui/ UI
│ ├── service/ 单例服务
│ └── utils/ 工具
├── atlas/ 图集
├── audio/ 音频
└── config/ 配置表
规则:
- 不允许随意新建根目录
- 不允许脚本乱放
- 不允许一个脚本写多个功能
三、团队协作规范
1. 分支管理规范(Git)
main:正式发布分支develop:开发主分支feature/xxx:功能分支(每人一个)bugfix/xxx:修复分支hotfix/xxx:线上紧急修复
流程:
- 从 develop 拉 feature
- 开发完成 → 提交 MR
- 通过 Review → 合并到 develop
- 测试稳定 → 合并到 main
2. 提交规范(Git Commit)
格式:类型: 内容
例:
feat: 新增背包界面fix: 修复关卡失败不回弹BUGopt: 优化对象池性能refactor: 重构UI管理模块docs: 补充注释
禁止:修改 优化 完成 这种无意义提交
3. 冲突避免规范
- 场景文件禁止多人同时编辑
要改场景 → 通知负责人 - 公共模块、基类、服务修改必须通知团队
- 预制体独立维护,一人负责一个模块
- 资源命名不能重复(用前缀区分:
ui_bag、icon_coin)
四、Code Review 规范
1. 必须 Review 的内容
- 新功能模块
- 公共工具、基类
- 复杂逻辑(战斗、数值、关卡、物理)
- 性能相关代码
- UI框架、管理器
2. Review 检查清单
- 是否符合命名规范
- 是否有
any、未处理异常 - 是否有冗余代码、重复逻辑
- 是否有内存泄漏(未取消监听、未清理计时器)
- 是否有
find()、getChildByName - 是否在 update 里做高耗操作
- 资源是否正确释放
- 异常是否捕获
- 方法是否过长(超过 80 行必须拆分)
- 是否有魔法数字、硬编码路径
3. Review 原则
- 不通过不能合并
- 问题必须标注清楚
- 必须给出修改建议
- 对事不对人
五、自测规范
1. 功能自测清单
- 功能是否按需求完成
- 边界值测试(0、空、最大值、负数)
- 快速连续点击是否BUG
- 重复打开关闭是否异常
- 资源是否正确加载/释放
- 异常情况是否有提示(网络失败、加载失败)
2. 性能自测
- 打开界面是否卡顿
- 大量实例化是否掉帧
- DrawCall 是否合理
- 内存是否持续上涨
- 切换场景是否泄漏
3. 真机自测(必须)
- 安卓/iOS 真机运行
- 不同分辨率适配
- 网络切换、弱网
- 后台切回是否正常
4. 自测通过标准
- 无报错
- 无警告
- 无内存泄漏
- 无不规范代码
- 功能完整稳定
六、脚本结构规范(统一格式,易读易维护)
@ccclass('UIBag')
export class UIBag extends BaseView {
// 1. 属性节点
@property(Node) itemContent: Node = null!;
@property(Button) closeBtn: Button = null!;
// 2. 变量
private _itemList: ItemData[] = [];
// 3. 生命周期
onLoad() {}
onEnable() {}
onDisable() {}
// 4. 公开方法
public showView() {}
// 5. 私有方法
private _init() {}
private _updateView() {}
}
七、绝对禁止的红线
- 禁止场景上挂大量脚本
- 禁止使用
find()查找节点 - 禁止跨模块直接引用
- 禁止大量
instantiate/destroy - 禁止在 update 写复杂逻辑
- 禁止硬编码、魔法数字
- 禁止不取消事件、不清理计时器
- 禁止脚本超过 300 行
- 禁止方法超过 80 行
- 禁止提交未自测代码
八、协作效率提升规则
- 接口先行
先写接口/枚举/常量,再写实现 - 数据结构统一
所有结构用 interface 定义 - 事件名统一管理
全部写在EventName.ts - 路径统一管理
全部写在PathConst.ts - 通用功能做成工具
不重复造轮子 - 每日构建一次
尽早发现问题 - 公共模块统一维护