📜 全员速查表 (The Blood Oath)
Status: LAW (宪法)
执行力: 违反本表红线导致的 Bug 或 性能事故,将被视为严重失职。请所有成员将对应部分背诵并在 Code Review / 资源提交时严格对照。
1. 💻 程序员 (Code: The Foundation)
核心痛点: 同屏 500+ 单位的性能压力 & 复杂的 Roguelike 状态叠加。
🔴 绝对红线 (Must Not)
- 禁止在主线程处理战斗逻辑: 伤害计算、索敌、Buff 结算必须走 Job System / Burst。主线程只负责发令。
- 禁止每帧分配内存 (No GC in Update):
- ❌
string text = "HP: " + hp;
- ❌
new List<Enemy>()
- ❌
foreach (var x in list) (在老版本编译器会有 GC,养成习惯用 for)。
- 禁止直接 Destroy/Instantiate: 任何高频对象(子弹、特效、怪物、伤害数字)必须走
ObjectPoolManager。
- 禁止硬编码文本: UI 上不允许出现任何中文/英文字符串,必须使用
Localization.Get("KEY")。
- 禁止在 Release 包开启 Log: Log 必须封装在
DebugUtil 中,并确保 [Conditional("DEBUG")]。字符串拼接的 Log 是手机发热的元凶。
🟢 核心原则 (Must)
- 防御式编程 (Null Checks):
GetComponent 必须缓存。外部传来的数据默认是脏的。
- 数据驱动 (Data Driven): 技能效果不写死在代码里,而是由
EffectID + Params 驱动。
- 正确:
ApplyEffect(EffectType.Damage, 100)
- 错误:
target.hp -= 100;
- 断线重连优先: 网络层设计必须假设随时会断网。所有请求必须有
Retry 和 Timeout,且在重连后能自动恢复状态。
2. 🎨 美术 (Art: The Face)
核心痛点: 混乱的战场视觉 & 移动端 GPU 压力。
🔴 绝对红线 (Must Not)
- 禁止无限制的 Overdraw: 特效粒子数严格限制(见 VFX标准)。一个火球爆炸不能覆盖全屏 3 层像素。
- 禁止使用 Standard Shader: 所有材质必须使用项目定制的
Toon/Mobile Shader。Standard Shader 是性能杀手。
- 禁止半透明物体乱序: 透明材质(UI、特效)必须手动指定
RenderQueue,防止显示层级错乱。
- 禁止非压缩贴图: Android 必须是 ASTC,iOS 必须是 ASTC/PVRTC。禁止 RGBA32 (UI 除外)。
- 禁止 Model 轴心不在脚底: 怪物和塔的 Pivot 必须在
(0,0,0) 且位于底部中心,否则寻路和放置会对不齐。
🟢 核心原则 (Must)
- 视觉层级 (Hierarchy): 玩家技能 > 怪物技能 > 死亡特效。做特效前先看 视觉层级指南。
- 合批优先 (Batching): 场景物件必须共用材质球。能用一张 2048 图集解决的,绝不拆成 4 张 1024。
- LOD (Levels of Detail): 超过 500面的单位必须有 LOD1 (减面 50%)。
3. 🧠 策划 (Design: The Soul)
核心痛点: 数值崩坏 & 引导劝退。
🔴 绝对红线 (Must Not)
- 禁止“乘法堆叠”无上限: 伤害公式中,独立乘区 (More Damage) 不能超过 3 个。必须引入边际收益递减。
- 禁止修改已上线 ID: 任何配置表里的
ID 一旦推上线,永不修改,只能废弃 (Deprecated) 并新增。否则玩家存档会坏。
- 禁止无提示的机制杀: 玩家死了一定要让他知道“怎么死的”。不能有“看不见的秒杀光环”。
- 禁止空投新机制: 任何新机制(如:带护盾的怪)必须先在简单的关卡单独出现一次(教学),然后再混入怪群。
🟢 核心原则 (Must)
- Excel 注释: 每一个配表字段,必须写清楚单位(秒、毫秒、百分比)。
Speed: 100 是 100米/秒 还是 100%?
- 保底机制 (Pity): 任何随机掉落(Roguelike 选卡、装备掉落)必须有伪随机保底。不能让非酋连续 10 次选不到核心卡。
- 预期管理: 技能描述里的数值必须是最终值(绿色高亮),而不是基础值。
4. 🎵 音频 (Audio: The Vibe)
核心痛点: 听觉疲劳 & 爆音。
🔴 绝对红线 (Must Not)
- 禁止无限制叠加音效: 同一帧播放同一个音效超过 3 次,必须被
AudioManager 拦截。
- 禁止 BGM 不循环: 背景音乐必须完美 Loop,不能有明显的“断点”。
- 禁止 2D/3D 混用: 只有 UI 音效是 2D 的。战场音效必须是 3D 的(或经过虚拟耳朵处理),否则玩家听声辨位会乱。
🟢 核心原则 (Must)
- 侧链压缩 (Ducking): 关键音效(大招、升级)播放时,必须自动压低背景音乐和杂音。
- 随机化: 高频音效(普攻、脚步)必须有 Pitch/Volume 的微小随机扰动,防止机关枪效应。
5. 📦 版本与流程 (Pipeline)
🔴 绝对红线 (Must Not)
- 禁止提交“红名”代码: 提交前必须本地编译通过,且无 Error Log。
- 禁止周五下午发版: 除非你想毁了全组人的周末。
- 禁止私自升级 Unity 版本: 引擎升级是全组的大事,必须由主程评估。
🟢 核心原则 (Must)
- Commit Message: 必须清晰。
Fix bug 是垃圾提交。Fix: 修复了箭塔在 30 级时攻速溢出的 Bug 是好提交。
- 美术资源命名: 严格遵守
T_Icon_Sword_01 (Type_Category_Name_Variant) 的命名规范。
📚 扩展阅读与技术标准 (References)
🚀 性能优化
🎨 美术规范
💻 代码架构