Unity UI 系列第二章:Canvas 渲染模式与性能优化策略
🎨 Unity UI 系列第二章:Canvas 渲染模式与性能优化策略
💡 Canvas 的核心:
- Screen、Camera、World 三种渲染模式有什么区别?
- 什么时候该用哪种 Canvas 模式?
- 如何优化 Canvas 的重建和性能?
- 多 Canvas 的最佳实践是什么?
系列第二章,深入讲解 Canvas 渲染模式和性能优化策略!
Image
空的 Image会造成一个 DC,并且会打断合批.创建的时候将Image 的 SourceImage 给赋值,并且不设置 RayCastTarget
颜色渐变和可以用一个新的material控制,本质上是更改Tint属性,这样既能满足颜色渐变,又能避免网格频繁重建
public Color color = Color.white;//使用动画修改此属性,耗时相对于使用直接修改Image.Color属性非常少
public Image image = null;void Start()
{
image = GetComponent();
image.material = Instantiate(image.material) as Material;
}void LateUpdate()
{
image.material.SetColor(“_Color”, color);
}
- 直接从创建的地方将 Text/Image/RawImage 这 3 种类型修改,设置 raycastTarget属性为 false,可以降低性能.
Empty4Raycast.cs 配合 button .使用的此脚本可以在有效接受点击事件的情况下,不增加DrawCall和打断合批,
只要点击区域,不要显示内容的。可以把空白透明Image替换成qiankanglai提供的Empty4Raycast.
[https://blog.uwa4d.com/archives/fillrate.html](https://blog.uwa4d.com/archives/fillrate.html)
Image叠加层数越多,overdraw 显示的颜色越红,同一个像素在同一帧绘制的次数越多.
这时候如果 Image是Sliced类型,中间区域是完全透明(相当于9宫格的边框),那么尽量将 Fill Center的勾去掉,
勾选掉即减少 Image 的显示部位.会缓解overdraw.
如果一张图片有很多区域是空白的,默认情况下fill rate是矩形区域。PolygonImage。可以减少透明区域的fill。
[https://blog.uwa4d.com/archives/fillrate.html](https://blog.uwa4d.com/archives/fillrate.html)
即减少 Image 的透明部位.会缓解overdraw.但是可能会使顶点/三角形变多.
内存是足够的,overdraw 的危害比较大一些,该用就用.
Image 原生自带的图片是使用 Unity 本身自带的图片,开发过程中不能使用Unity 本身自带的图片,必须由我们本身设计的图片才行.
在源码 MenuOptions.cs 的 GetStandardResources 方法中,已将其屏蔽.
一张图片有很多空白,使用 Use Sprite Mesh 会缓解overdraw,但是增加 Mesh 的线条,在 Scene 窗口中,使用 Wireframe 查看.
此方式已经和 TexturePacker 工具打出的图片区别没有太大了.
在一张图上的透明通道很多的情况下的区别是:
Unity 自带工具打出的顶点数少,overdraw 高一点,TexturePacker打出的顶点数多,overdraw 少一点.
可以使用TexturePacker导出单张图片,然后使用 SpriteAtlas 组合成图集,再使用 Use Sprite Mesh 即可,
此方式与直接使用TexturePacker插件效果一致.
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1487842110@qq.com
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自新诸子
