2018腾讯移动游戏技术评审标准与实践案例_209页_10mb
报告摘要
2018腾讯移动游戏技术评审标准与实践案例总结
核心内容
2018年腾讯移动游戏技术评审标准与实践案例文档涵盖了多个技术维度,包括客户端性能、弱网络状况、适配兼容性、服务器性能、安全防护以及技术运营。文档通过多个实践案例深入探讨了Unity引擎在C#代码效率、GC与内存管理、结构体与类的使用、枚举与字典的使用、闭包对性能的影响等方面的具体优化策略。
主要观点
客户端性能
- 内存消耗:应确保客户端在不同配置下物理内存消耗合理。
- 帧率:在默认画质配置下,核心游戏场景帧率需稳定在一定数值以上。
- CPU占用:不同游戏场景下CPU占用应保持在合理范围。
- 流量消耗:对于分局场景,以单局流量为基准;对于不分局场景或流量与局时相关的场景,以一定时间内的流量为基准。
- APK大小:若安装包过大,建议使用CDN资源。
弱网络状况
- 游戏应正确处理弱网络状况,避免出现收支不等、卡死/崩溃等异常。
- 游戏核心功能(如登录、单局、支付)不能因弱网络导致UI或交互问题。
- 需要合理的重连机制,避免每次重连都返回到登录界面。
- 防止玩家因弱网络被额外获利或造成游戏攻击。
适配兼容性
- 机型适配:TOP100基线以上的机型需适配,适配失败的机型用户占比应低于2%。
- Crash率:用户crash率必须低于3%,次数crash率必须低于5%。iOS crash无遗留问题。
- 用户crash率:crash影响设备数/联网设备数。
- 次数crash率:crash次数/登录次数。
服务器性能
- 服务器需通过容灾处理、过载保护、防雪崩机制等测试。
- 在单机综合场景测试中,需满足性能基线要求,各事务90%响应时间 < 1秒,各事务成功率 > 99.9%。
- 稳定性测试需运行10小时以上,服务进程无重启,无内存泄漏。
安全防护
- 代码保护:建议使用代码混淆、加壳保护或服务器签名校验。
- 敏感信息:发布报中不能输出敏感信息。
- 协议安全:通过重发和修改协议不能获得额外收益或造成攻击。
- 数据校验:核心游戏逻辑与数据在服务器校验,防止作弊。
- 攻击防护:拒绝服务器攻击扫描。
- 组件风险检测:防止游戏运营数据泄露。
技术运营
- 动态扩展:前端、逻辑层、存储层应支持动态扩容。
- 高可用容灾:核心模块和关键路径不能有单点故障,大并发访问需防雪崩。
- 负载控制:后台服务器负载满时,客户端需实时检测并提供拒绝机制。
- 数据分离:业务数据和日志数据应分离,无法分离则提供清理策略。
- Cache管理:Cache的回写频率可配置。
- DB访问:不能有全表扫描。
- 配置动态重载:支持通过重载配置工具动态重载配置文件,无需中断服务。
关键信息
Unity之C#效率篇
- GC与内存:
foreach会因装箱操作产生GC,每次约40B。for和nonforeach不产生GC,建议在Update或LateUpdate中使用。- 使用
StringBuilder可减少GC,特别是处理大量字符串拼接时。 - 使用
ref可减少闭包带来的GC,建议在函数调用频繁时考虑使用。
Struct与Class
- Struct:在栈中不产生GC,适合处理大量短暂对象。
- Class:在堆中,会产生GC,适合处理复杂逻辑和抽象数据。
- Array vs ArrayList vs List:
- 数组:内存连续,索引速度快,但不支持动态扩展。
- ArrayList:动态扩展,支持不同类型的结点,但存在装箱拆箱问题。
- List:泛型,规避装箱拆箱问题,性能更优。
Enum使用
- 枚举在作为键或转换为字符串时,会产生装箱操作,进而产生GC。
- 建议避免将枚举作为键或频繁转换为字符串。
闭包影响
- 使用闭包时会涉及GC,每增加闭包引用内容,GC产生的内存会增加。
- 若函数调用频繁,建议不使用闭包。
其他优化建议
U3D对象优化
- MonoBehaviour:删除无用的空函数,减少不必要的调用。
- Update优化:如非每帧都需要执行,可通过
Time.frameCount控制频率或使用协程。 - GameObject:在不可见时设置
enabled = false,停止调用Update。 - 查找对象:提前缓存对象和组件,避免频繁调用
Find或GetComponent。
协程优化
- 使用
WaitForSeconds时,提前创建对象以减少GC,例如:WaitForSeconds shortWait = new WaitForSeconds(0.1f); WaitForSeconds longWait = new WaitForSeconds(5.0f);
Component相关优化
- Transform:使用内建数组如
Vector3.zero而非new Vector3(0, 0, 0)。 - GameObject:缓存组件,避免频繁调用
GetComponent。
NGUI vs UGUI
- NGUI:依赖
depth设置渲染顺序,后期维护复杂。 - UGUI:
- 渲染顺序与Hierarchy节点布局相关,直观易用。
- 支持
RectTransform,便于UI编辑。 - 合并网格操作在5.2版本后移至子线程,减轻主线程压力。
- UGUI的
UIMesh由底层C++实现,比NGUI更高效,减少GC触发次数。
总结
文档全面覆盖了腾讯移动游戏开发中的技术评审标准与实践案例,强调了性能优化、兼容性、安全性及运营效率。通过具体案例和测试数据,详细说明了C#代码的GC和内存管理问题,提供了有效的优化策略。建议在实际开发中,根据具体情况选择合适的开发方式和优化手段,以提升游戏性能和用户体验。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载