-
•核心内容
- •指标定义:帧率(游戏内60FPS/游戏外30FPS)、内存阈值(iOS设备实测崩溃阈值表)
- •问题分类:
- •内存问题:泄漏检测(多次场景切换观测内存增长)
- •处理负载:瞬时峰值(GC/大量计算)、稳态负载(CPU/GPU瓶颈)
- •工作流程:测量(Profiler)→ 定位原因 → 优化 → 验证对比
-
•硬件原理
-
•SoC架构:CPU/GPU集成设计
-
•CPU特性:流水线机制、缓存层级(L1/L2/L3)
-
•GPU特性:并行计算架构、显存传输瓶颈
-
-
•渲染流程
-
•渲染管线:顶点着色器→片段着色器
-
•过度绘制:半透明物体叠加渲染
-
-
•数据表示
-
•纹理内存公式:
宽×高×通道数×位深/8 -
•网格结构:顶点坐标/UV/法线数据
-
-
•
Unity机制
-
•IL2CPP编译:IL→C++→机器码
-
•AssetBundle依赖:避免重复资源
-
-
•工具矩阵
工具类型 代表工具 核心功能 Unity内置 Profiler CPU/内存/GPU模块化分析 内存分析 Memory Profiler 快照对比(图3.4操作界面) GPU分析 RenderDoc 绘制指令捕获(图3.9界面) 原生工具 Xcode Instruments iOS内存分配跟踪(图3.6.4) -
•操作守则:优先真机测量,编辑器数据仅作参考
-
•纹理优化
-
•禁用Read/Write(节省内存副本)
-
•ASTC压缩策略:6×6平衡大小/速度
-
-
•网格优化
-
•顶点压缩:剔除冗余法线/切线数据
-
•启用Optimize Mesh Data选项
-
-
•动画优化
-
•关键帧精简:减少30%曲线数据
-
•蒙皮权重:骨骼数≤4
-
-
•AssetBundle策略
-
•粒度设计:按功能模块分包(如"角色_材质"独立包)
-
•压缩选择:LZ4(加载速度)> LZMA(包体大小)
-
•依赖管理:共享资源独立打包(图2.34依赖关系)
-
-
•碰撞检测优化
-
•层级矩阵:减少不必要的碰撞对(如UI层无视环境碰撞)
-
•射线检测:
// 避免GC分配 RaycastHit[] results = new RaycastHit[10]; Physics.RaycastNonAlloc(ray, results); -
•刚体睡眠:启用Sleeping State减少计算
-
-
•分辨率策略
- •动态缩放:根据设备性能降分辨率(720p→540p)
-
•批处理技术
-
•静态批处理:合并静态物体网格(省Draw Call)
-
•GPU实例化:相同材质/网格物体批量渲染
-
•SRP Batcher:变体相同材质合并SetPass Call
-
-
•遮挡剔除
- •预计算场景遮挡数据(图7.5.3)
-
•画布分区
- •动态元素(血条)与静态背景分离
-
•射线投射优化
- •非交互元素禁用Raycast Target
-
•文本渲染
- •TextMeshPro替代UGUI Text(节省50%顶点)
-
•GC分配规避
场景 优化方案 效果 对象高频创建 对象池(ObjectPool) 零GC分配 字符串拼接 StringBuilder复用 减少内存碎片 LINQ查询 转for循环 避免延迟执行开销 -
•Burst编译加速
[BurstCompile] struct ParallelJob : IJobParallelFor { ... }
-
•后端选择:IL2CPP > Mono(性能提升20%)
-
•代码剥离:Managed Stripping Level = High
-
•DOTween:启用autoKill减少内存驻留
-
•UniTask:CancelationToken管控异步任务