##合批原理:
1. Batch以Canvas 为单位,Canvas 之间互不影响,一个 Canvas 中包含多个 DC,判断依据:同一 Canvas?同一 Atlas?同一材质?同一深度?相同遮罩情况?
2. Canvas 内如果 DC 发生变化(增加、减少、排序变化)会出发全部 DC 重新绘制;如果一个 DC 内发生变化会重建此 DC 内的 Mesh。
3. 此外 DC 太多也不行,一般情况下一个 UI 界面 30 个 DC 以内。
##避免Canvas重绘:
谨慎使用 SetActive,使用scale =0.01或者alpha = 0.01或者移到屏幕外CanvasRenderer.Cull为True等方式代替
尽量避免某些组件的材质发生变化
##减少DC内Mesh Rebuild:
动静分离,把变化的东西拆除单独的 DC,比如战斗伤害数字和血条、经常赋值的 Text。
如果 Mesh Rebuild 压力较大,如果是不改变的文字可以使用 Image 代替。
DC 内的内容越少 Mesh ReBuild 消耗越低
##减少DC:
尽量图集,避免组件图集穿插,字体也造成穿插(他是单独的图集),一般把字体放在最高层。
##尽量少用GameObject.SetActive()
使用 scale =0.01 或者 alpha = 0.01 或者移到屏幕外或者 CanvasRenderer.Cull为 True 代替
有可能造成 Canvas 的 DC 重绘,
Enable 和 Disable 的声明周期函数也会造成一定的消耗。
##Text:
少使用shadow和outline,outline多绘制4次,shadow多绘制1次,同时开启多绘制9次。
##Texture:
把可以合并的图片进行合并,比如单拆了一张图实际画到背景上也是可以的。
打图集避免大量空白,使用一些优化技巧,如图片旋转
可以适当缩小图片尺寸,比如图片尺寸缩小到 80% 左右一般情况下是没有问题的
## 不需要射线检测的组件关闭 RaycastTarget
## 只需要矩形遮罩区域有限使用 RectMask2D 代替 Mask
## 多数情况下应关闭 Canvas 的 PixelPerfect(UI 元素像素对应)
Canvas
Canvas是用来放置所有UI元素的地方,所有的UI元素必须是这样一个Canvas的子对象。它给
Unity
的渲染系统提供按层划分的几何系统,负责将其内部的几何形状合并到批处理、生成合适的渲染指令并发送到
Unity
图形系统。
当UI元素变化时,它会重新生成网格并向GPU发起绘图调用,从而显示出UI。
生成这些网格会消耗大量
性能
,需要将UI元素收集到批处理中,从而尽可能减少绘图...
100 禁止通过 new 的方式实例化 MonoBehaviour 的派生类,否则无法得到引擎有效的 管理。
规范
等级S
101 禁止在update,fixedupdate,lateupdate,ongui等频繁调用的逻辑中使用协程。规 范等级 S
102 禁止使用 Resources.Load 加载资源。个别特殊情况除外。
规范
等级S
103 禁止使用 Linq。
规范
...
点击跳转=>熬夜再战Android从青铜到王者-开发效率插件篇
点击跳转=>
Unity
粒子特效系列-龙卷风预制体做好了,
unity
package包直接用!
点击跳转=>姐姐喊我解锁套娃新技能:FairyGUI在
Unity
中实现List嵌套List/立体画廊等,玩出花儿来
点击跳转=>
Unity
新手必备5款宝藏插件–价值上千元白嫖最新版
爆肝万字C#基础入门大总结【建议收藏】
Android修.
一:变量小写字母开头:int passWord = 123456;
二:函数大写字母开头:void GetPassWord();
三:函数参数以"_" + 小写字母开头: void SetPassWord(int _passWord);
四:变量、属性、枚举、声明写最前面。
Unity
3D的
性能
优化:
一.缓存组件查找
另一个优化是组件缓存。这种优化需要一些代码并且不是