Rect Transform 左上⾓⽅形图标为预设好的的锚点布局,可设定对⽗层相对位置或边距
1. 锚点定位控件中⼼
控件随⽗层⼤⼩相对位置移动
2. 锚点定位控件四⾓
⼤⼩随⽗层⼤⼩⽐例缩放
3. 锚点定位⽗层四⾓
控件距⽗层四边距离不变
4. 锚点定位于⼀边
则固定⼀边位置不随⽗层变化(如锚点固定上边,底边不随⽗层底边变化,另外三边保持与锚点边等间距)
⾃动布局组件 Auto Layout Components
Canvas 上仍可添加以下组件实现⾃动布局,但性能消耗相对较⼤,应避免使⽤
1. Layout Element
⾃我控制最⼩宽⾼、偏好宽⾼、可调宽⾼、布局优先级
2. Aspect Ratio Fitter
⾃⾝⽐例约束 宽⾼⽐ 或 随 ⽗控件变化
3. Layout Group
⽗控件使⽤ Horizon/Vertical/Grid 做⼦空间布局
4. Content Size Fitter
⽗控件使⽤ 随⼦控件⼤⼩变化
UI 优化canvas动画
参考
官⽅
基本原理
Canvas 负责打包图形组件成批处理(batch),⽣成渲染命令到Unity图像系统,其过程通过C++实现,称为重批处理(rebatch)和批量构建(batch build)
当已Canvas有图形需要重组时则称该 Canvas 为脏画布(dirty),⼦ Canvas 将其⼦控件与⽗ Canvas 隔离,使⽗Canvas 不会受⼦Canvas 控件脏化,反之亦然,但也有极端例⼦如⽗ Canvas 导致⼦ Canvas resize。Layout 组件与 Graphic 组件为独⽴两部分,但都依赖于CanvasUpdateRegistry,该类跟踪组件的Layout与Graphic并随willRenderCanvases 事件触发更新 Layout 与 Graphic 更新称为重建(rebuild),由Canvas通过透明队列绘制的图形,即与Alpha通道混合由后向前绘制,即每个被光栅化图形像素都会被采样,⽆论是否被⾮透明
⼯具
使⽤ Unity Profiler UI 板块查看 Batch 拆分原因(不同Material,不同Texture),合并不同Texture可使⽤ 精灵图集(Sprite atlases)位于同⼀图集内的图像会加⼊同⼀batch
使⽤Unity Frame Debugger查看渲染顺序,决定调整相同材质层级,便于合并batch
Tips
1. 使⽤Canvas动静分离,更新周期相近的的控件分为⼀Canvas,或长期不变的控件集中在⼀Canvas,新版本经过优化⾮极端条件不需要动静
分离
2. 少⽤ Layout Element,减少 layout 层级计算时间,UI图像、⽂本和滚动矩形也是
每个将其布局标记为脏化的UI元素⾄少会执⾏⼀次 GetComponents 调⽤。该调⽤会在 Layout Element 的⽗级中查有效的布局组。如果到,它会继续向上查 Transform 层级,直到停⽌查布局组或达到根层级(以先到为准)。因此,每个布局组会将⼀个
GetComponents 调⽤添加到每个⼦ Layout Element 的脏化过程,这导致嵌套不具⾜的性能极其低下。
3. Graphic Raycaster,关闭⾮交互控件的Raycast Target选项, 添加Raycast block阻挡下层事件检测
4. 避免使⽤ Camera.main,其⽅法本质为使⽤ Object.FindObjectWithTag,WorldSpace 需要分配 Event Camera,留空默认使⽤
Camera.main
5. 不要⽤户通过重定⽗级再禁⽤的⽅式集中 UI 对象,先禁⽤对象,然后将其⽗级重定到池中。
6. 隐藏⽆⽤画布, disable Canvas Component,停⽌绘制,但保留批信息,不会调⽤ enable ⽅法,其他⽣命周期⽅法正常
7. 动画器每⼀帧都会脏化其元素,即使动画中的值不发⽣更改, 应对于很少发⽣更改或在响应事件时才会短时间发⽣更改的元素,请⾃⾏编写代
码或补间系统
8. 禁⽤⽆效相机
9. 尽量减少 UI 层级,纹理整合⼊背景图像
10. 透明图像相互遮盖也会导致 batch 拆分、如⽂字透明区域遮盖图像,分离透明重合区域、改变视图层级同类分组
11. 使⽤ Sprite Atlas 精灵图集打包图像
12. 不要⽤ Best Fit 字体⾃适应
13. 在WorldSpace中 TextMeshPro ⽐ TextMeshProUGUI更⾼效
参考
Sprite 与 Canvas unit 关系
适配规则
ipx适配
[Canvas配置](

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。