3D球场项目 (六):客户端工程化与优化
3D球场项目 (五) 把客户端的核心业务流 讲完了:Native 推送 → DataManager 队列 → ScenePlayer 章节调度 → GameController 状态机 → Handler → 渲染层。功能闭环跑通之后,真正的硬仗是 “工程化"和"性能”——前者保证 项目能稳定上线(编译跑通、退出不崩、Swift 调用顺手),后者保证在中低端机上画面流畅。 第一版上线时遇到了两类问题: 稳定性 / 工程化:modulemap 编译报错、lipo 架构冲突、A11 设备启动 crash、 Cocos 退出期 OpenAL 资源竞争 crash……这些都不是"画面卡",但每一个都能让用户体验 归零; 性能:中端 iPhone 在比赛回合渲染期间,GPU 和 CPU 都偶尔抖到 80%+,帧率掉到 30 fps 出头。 本篇按这两类拆成两部分,所有改动都遵循一条原则:不动玩法,只把工程问题和帧时间 解决掉。 架构改动一览 3D球场项目 (二) 介绍过弹幕引擎的四层 架构(腾讯视频 APP / MagicDanmakuiOS / MagicDanmaku / cocos-engine)。这一阶段 每一层都动了——3D 球场不是单点改造,而是一次自上而下的纵贯。下面这张图是把 PartTwo 那张原始架构图重画一遍,改动的节点用蓝色、新增的节点用绿色, 没动的节点保持白色: 未改动 本次改动 本次新增 腾讯体育 APP(新接入方) ▲ 业务层 SwiftUI(腾讯体育侧,PartFive §四 / 全部新增) InMatchTop3DLiveView QS3DCourtSwiftUIView QS3DCourtEventBroker CourtContainerControlOverlay TennisMatchScoreBoard TennisGameEventBoardView QS3DCourtViewController MagicDanmakuViewController ▲ 弹幕业务接入层 MagicDanmakuiOS(PartFive §三 + PartSix 第一部分) 资源包 业务接入层 JS 注册绑定 动态化 playground CocosPlayer(场景代理回滚) modulemap + framework A11 / lipo 构建修复 ▲ 弹幕实现 MagicDanmaku(PartFive §二 + PartSix 第二部分) Assets 资源包 TypeScript 版弹幕组件(原有,未改) 样式 轨道 特效 通信 … ★ 新增:3D 网球球场(assets/tennis/) Model / DataManager ScenePlayer GameController States × 6 Handlers × 7 Player / QSArmature Ball / Bezier+Physics Camera Audience(VAT) Shader 球场边线 素材 图片 视频 音频 网球资产(减面 / 压缩 / 合材) 二进制库 engine framework(重新打包) external framework(A11 兼容重编) ▲ 引擎内核 cocos-engine(PartFive §一 + PartSix §二、§三) 2D 3D 物理 粒子 … loadScene(进度 / 传参 / 4 阶段代理) JsbBridgeWrapper(内存语义) AudioEngine(OpenAL atomic 守卫) OC 头文件(Swift 友好标注) 引擎内核扩展 cocos-engine/native/external webp freetype … 一句话归纳: ...