项目概览
《六代钟馗》是一款 3D 国风卡牌养成手游,是与动画电影《钟馗》联名的游戏产品。游戏的世界观和故事设定源于同名动画电影,角色与场景大量吸收《山海经》中的东方奇幻元素,并采用风格化的三维美术表现。
在项目中,我主要负责伙伴养成、布阵和抽卡等核心业务系统的重构,同时参与角色阴影与场景渲染优化。
伙伴养成与红点系统
伙伴系统包含升级、升品、升星等多个培养维度,每个伙伴的不同培养项都需要独立判断状态。当伙伴数量和培养入口增加后,集中刷新所有红点会产生较大的瞬时计算压力。
我在重构伙伴养成系统时,将各层级状态组织为一棵红点树,使子节点的变化能够逐级汇总到上层入口。同时使用消息队列限制红点重新检查的频率,将集中计算拆分到多个 Update 周期中执行。
例如,队列可以配置为每隔 10 帧处理 5 条检查任务,直至队列清空。这样既能保持红点状态及时更新,也能避免大量检查在同一帧集中执行。
场景渲染优化
Planar Shadow 角色阴影
项目场景以静态物体和平坦地形为主,环境光照及阴影大多采用预烘焙方案。针对需要实时表现的角色阴影,我实现了 Planar Shadow,用较低的运行成本获得稳定的接地效果,避免为角色启用开销更高的实时阴影方案。
GPU Instancing 与合批
场景中的大量静态物体使用 Lightmap。由于不同物体的 unity_LightmapST 参数不一致,Unity 无法直接将它们合批,导致场景 Draw Call 增加。
我使用 DrawMeshInstanced 接口自行组织和绘制可实例化对象,并为实例对象建立 BVH 空间层级,加速视锥体剔除,减少无需提交的实例。
负缩放物体还会导致三角形绕序反转,使背面剔除无法正确判断正反面。针对这种情况,我在 Shader 中增加关闭背面剔除的绘制 Pass,并在提交实例时选择对应 Pass,从而兼容需要正反面显示的负缩放模型。
布阵系统重构
布阵界面会被多种战斗玩法复用,但不同玩法往往需要额外的界面元素、交互表现和业务规则。如果持续在基础布阵逻辑中增加条件分支,系统会越来越难以维护。
我通过继承与模块化拆分通用能力和玩法差异:
- 基类负责角色上阵、下阵和位置调整等公共流程。
- 派生对象可以重定义上阵或下阵完成后的行为。
- 自定义 UI 与玩法逻辑封装为独立模块,按需注册到基类或派生对象。
这种结构让新增战斗玩法能够复用稳定的布阵基础流程,同时将各玩法的特殊规则保持在独立模块中。
抽卡流程与表现
我还负责重构抽卡的完整流程和演出表现。表现节奏参考《原神》的抽卡体验,将操作、过场与结果展示组织为连续流程,强化揭晓结果前的期待感,并为不同抽取结果预留差异化表现能力。


