赞
踩
本系列是学习siki学院UGUI整体解决方案-优化篇(Unity 2019.1.0f2)笔记
github地址:https://github.com/BlueMonk1107/UGUISolution
图集分块算法地址:https://github.com/DaVikingCode/UnityRuntimeSpriteSheetsGenerator
texturepacker官网:https://www.codeandweb.com/texturepacker
3D和2D都是网格绘制的,只是复杂程度不同
在unity中查看网格 :
可以看到新建的text的网格
Unity性能优化总结一中第2点
像素填充率是指图形处理单元在每秒内所渲染的像素数量,单位是MPixel/S(每秒百万像素),或者GPixel/S(每秒十亿像素),是用来度量当前显卡的像素处理性能的最常用指标。显卡的渲染管线是显示核心的重要组成部分,是显示核心中负责给图形配上颜色的一组专门通道。渲染管线越多,每组管线工作的频率(一般就是显卡的核心频率)越高,那么所绘出的显卡的填充率就越高,显卡的性能就越高,因此可以从显卡的象素填充率上大致判断出显卡的性能。
分辨率 : 整个屏幕宽高的像素点,像素点越多,屏幕图像就越清晰细腻
Unity性能优化总结一中第4点
**
首先对其子物体进行批处理,合并batch,然后发送渲染指令到unity的图形系统(通过CanvasRender获取组件的几何图形)
# 封装的C++类
public sealed class Canvas : Behaviour
Graphic继承了ICanvasElement接口,代表此组件需要作为canvas的子物体,如果没有放在canvas下则不能进行正常的mesh重建(ICanvasElement接口中含有Rebuild方法)
public abstract class Graphic : UIBehaviour, ICanvasElement
mesh是否被修改了,如果被修改了就被标记,需要重建,如此才能将修改的被显示出来
主要需要注意的是Layout/Material/Vertices
MaskableGraphic继承了IMaskable,UI组件中继承此类的都能被遮挡,比如Image/Text
public abstract class MaskableGraphic : Graphic, IClippable, IMaskable, IMaterialModifier
public class LayoutRebuilder : ICanvasElement 此类中会调用:CanvasUpdateRegistry中的TryRegisterCanvasElementForLayoutRebuild方法 private static void MarkLayoutRootForRebuild (RectTransform controller) { if (!(controller == null)) { LayoutRebuilder layoutRebuilder = s_Rebuilders.Get (); layoutRebuilder.Initialize (controller); if (!CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild (layoutRebuilder)) { s_Rebuilders.Release (layoutRebuilder); } } } CanvasUpdateRegistry中会将此元素加入重建队列中 public static bool TryRegisterCanvasElementForLayoutRebuild (ICanvasElement element) { return instance.InternalRegisterCanvasElementForLayoutRebuild (element); } private bool InternalRegisterCanvasElementForLayoutRebuild (ICanvasElement element) { if (m_LayoutRebuildQueue.Contains (element)) { return false; } return m_LayoutRebuildQueue.AddUnique (element); }
能排序的都会继承ILayoutElement(Image/Text):
public class Image : MaskableGraphic, ISerializationCallbackReceiver,
ILayoutElement, ICanvasRaycastFilter
建议避免使用自动排序组件,因为需要进行重建的消耗非常高
负责Canvas更新的注册,其他类是否需要重建都是调用此类中的方法
protected CanvasUpdateRegistry ()
{
Canvas.willRenderCanvases += PerformUpdate;
}
# PerformUpdate中会进行Layout重建/Graphic重建
剪切逻辑在GetModifiedMaterial方法中 : 主要实现的效果是模板(stencil)缓存
对2D进行遮罩,继承了剪切部分的接口IClipper
public class RectMask2D : UIBehaviour, IClipper, ICanvasRaycastFilter
#IClipper主要方法是PerformClipping : 实现剪切逻辑
因为实现不同,之后的优化过程中的表现也不同
参考 : UGUI源码
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。