Skip to main content

UI策略

场景与策略

场景策略
基础层级控制Sorting Layer按功能分组,Order in Layer动态调整
多Canvas架构动静分离+按功能分层,限制重建范围
渲染模式选择Overlay用于全屏UI,Camera用于3D集成,World Space用于场景内UI
性能优化减少重建+合批优化+对象池
特效与UI混合独立Canvas+Stencil Buffer或Shader控制渲染顺序

img

  • 血条管理:World Space模式,Z轴调整确保不被场景物体遮挡。
  • 技能特效:独立Canvas,Order=75介于主界面和弹窗之间。
  • 弹窗层级:最高Order=100,始终置顶,关闭时销毁Canvas释放资源

优化策略

结合Profiler监控Canvas.BuildBatch耗时,针对性优化重建频率

优化场景技巧组合预期效果
多按钮界面扁平层级 + 同图集 + 无重叠10个按钮→1个Draw Call
带遮罩的滚动列表RectMask2D + 列表内同材质减少2个Mask额外Draw Call
动态血条与静态背景独立Canvas + Z轴归零血条刷新仅触发子Canvas重建
透明点击区域Empty4Raycast替代透明Image消除无效渲染与合批中断

减少Canvas重建(Rebuild)

  • 问题:频繁修改Text、Image属性或RectTransform会触发重建。

  • 解决方案

  • 动态文本:用StringBuilder拼接字符串,减少Text组件的赋值次数。

  • 位置更新:避免在Update中连续修改RectTransform,改用事件驱动。

合批优化

  • 规则:同材质、同纹理的相邻UI自动合批。
  • 技巧

将相同材质的UI放在同一Canvas下(如所有按钮图标)。

禁用透明重叠:半透明UI混合增加GPU开销,减少非必要透明区域。

对象池与分帧加载

  • 滚动列表复用Item:用ScrollRect+对象池避免频繁实例化。
  • 分帧生成UI:每帧生成10个物品,避免卡顿
IEnumerator LoadItems(List<Item> items) {
for (int i = 0; i < items.Count; i++) {
Instantiate(itemPrefab);
if (i % 10 == 0) yield return null; // 每10个分一帧
}
}