什么时候触发
OnEnable
调用 CacheCanvas,获取父对象的Canvas组件
将父对象Canvas组件,注册到GraphicRegistry
SetAllDirty:
1. 通知LayoutRebuilder布局重建
2. Vertex页点信息(SetVerticesDirty)
3. Material材质(SetMaterialDirty)
OnDisable
从 GraphicRegistry 移除 Canvas注册
通知 LayoutRebuilder 重建布局
当RectTransform数值改变时
OnRectTransformDimensionsChange ():顶点Dirty、布局Dirty
父对象改变(前/时)
前 OnBeforeTransformParentChanged:从GraphicRegistry移除注册、重建布局
时 OnTransformParentChanged:重新获取父对象中的Canvas,并重新注册在GraphicRegistry、SetAllDirty
当应用动画属性后
OnDidApplyAnimationProperties:SetAllDirty
当画布层次改变时
OnCanvasHierarchyChanged:如果Canvas改变,重新注册到GraphicRegistry
Rebuild干了啥
rebuild Layout
计算各元素的位置和大小
rebuild graphic
UpdateGeometry 重建网格数据:OnPopulateMesh:
1. 设置顶点三角形
2. 修改Mesh信息
3. 将信息设置到 canvasRenderer
UpdateMaterial 更新材质信息设置:canvasRenderer 的
1. 材质 2. 纹理
怎么办
动静分离,拆分Canvas,意义: 尽量减少 graphic Rebuild 的频率
删除不必要的节点和隐藏不用的节点,意义: 减少深度排序和rebuild Layout的执行时间
ScrollRect 关闭 Pixel Perfect, 意义: 尽量减少 layout Rebuild 的频率
设定移动闽值,降低开销
Material.SetColor:
好处:不会更改网格信息,因此不会有Rebuild
坏处:因为修改了材质,所以增加一个DP