
Rect Transform的作用是用来计算UI的位置和大小的,Rect Transform继承与Transform,具有Transform的所有方法和属性,通过Rect Transform能够实现基本布局和层级控制学习Rect Transform需要熟悉掌握以下专业术语:
●:Pos X, Pos Y:Pivot与Anchor的距离;
●:Pivot :中心点;
●:Anchor:锚点;
●:Width&Height:宽与高,相对于锚点;
●;Left,Right,Top,Bottom:左右上下;
指的是U件上的蓝色小圆圈,如下图所示
当鼠标拖动U控件进行旋转、缩放和对齐的时候都会以该点做为对照点
Pivot的位置在控件的中心时,x=05,y=05
Pivot的位置在控件的左下角时,x=0,y=0
Pivot的位置在控件的右上角时,x=1,y=1;
点击图示如下图所示:
按下 Shift键可以设置 Pivot的位置,确定 Pivot的位置,再配合 RectTrans继承于 Trans
form中Posx,PosY的值,可以让控件的 Pivot和其父物体的锚点对齐。
锚点表示的是控件上的某一个点,U画面进行缩放时,该点到其子控件上四个控制点
的距离保持不变,锚点的形状如下图所示:
1、四个锚点,相对于四根钉子,钉在image父级元素上。
2、四个实心蓝点,相当于四个纽扣,缝在Image的四个边上。
3、锚点和纽扣之间被四根无形的钢丝链接,注意是钢丝,因为不会伸缩。
4、如果把Image调整好了大小,现在想让他随着屏幕的变化进行缩放,那么就把四个锚点,拖拽到四个纽扣上,相对于把Image
的四个角钉在了父级元素上,父级元素缩放就会拽着Image进行缩放,比例是一致的。
5、锚点合并在一起,相当于把Image四个角往同一个方向拽,所以不会改变Image的大小。
什么是Canvas
使用UGUI来进行UI开发,离不开Canvas组件,所有的 UI 元素,要么自己包含 Canvas 组件,要么是 Canvas 组件所在 GameObject 的子节点。
如何创建 Canvas
你在 Hierarchy 视图创建任何一个 UI 元素(比如Image)都会自动生成一个 Canvas 作为它的父节点。你也可以可以直接创建一个 Canvas,然后添加其他 UI 元素作为其子节点。
Canvas 组件的RenderMode 参数
Canvas 组件的参数 RenderMode,有三个选项:Screen Space - Overlay、Screen Space - Camera、World Space。
Screen Space - Overlay 模式
Canvas 覆盖屏幕,且永远覆盖在其它元素的上层,也就是说 UI 会遮挡场景中的其它元素。
Screen Space - Camera 模式
和 Overlay 模式相仿,Canvas覆盖整个屏幕空间画布也是填满整个屏幕空间。不同之处在于,Canvas 被放置于指定摄像机的前方。
World Space 模式
此种模式下,Canvas 与场景中其它3D元素没有区别,相当于GameObject,可以进行旋转,移动等 *** 作
1 Horizontal Layout Group水平布局
Padding:Layout边缘的间隙;
Spacing:Layout元素之间的间隙;
Child Alignment:子元素的对齐方式,就是文字对齐的那九种,不多说了;
Control Child Size:是否会控制子元素的宽高,只有启用该选项Layout Element的设置才会起作用;
Child Force Expand:是否强制子元素扩张以填满多余空间,该选项不受Flexible属性的影响,并且优先级比Flexible属性高,以1:1的比例进行分配。
2 Vertical Layout Group垂直布局
与水平布局无异
3 Grid Layout Group网格布局
adding:Layout边缘的间隙;
Cell Size:每个元素的尺寸,该值会控制子元素的宽高;
Start Corner:第一个元素所定位角落;
Start Axis:排列方式,一种水平、一种垂直;
Child Alignment:对齐方式,九种;
handle rect:(父节点矩形)
用于控件的滑动“句柄”部分的图形;
Direction:(方向)
拖动手柄时,滚动条的值将增加的方向。选项是从左到右,从右到左,从下到上和从上到下;
Value:(值)
滚动条的初始位置值,范围为00到10。
Size:(大小)
滚动条中手柄的小数部分,范围为00到10
Number Of Steps:(位置数)
滚动条允许的不同滚动位置数。
在游戏中经常遇到一些拖动滚动的效果,比如好友列表,游戏商店分类等等,要想实现这些功能就需要使用到ScrollView拖动效果了
层级识图如下图所示:
Viewport:显示内容
Scrollbar Horizontal:水平方向滚动条
Scrollbar Vertical:垂直方向滚动条
ScorllRect组件
Content:可滑动的区域
Horizontal:控制是否可以横向拖动;
Vertical:控制是否可以纵向拖动;
Movement Type:三种d性类型;[不限制 -- d性 -- 不动]
Elasticity:d力大小
Inertia:惯性;
Deceleration Rate:减速的速率
Scroll Sensitivity:滑动的灵敏度
Horzontal Scrollbar:横向滑动条
Vertical Scrollbar:竖向滑动条
normalizedPosition:滚动视图所处的位置,值的范围为(0,0)--(1,1);
VerticalNormalizedPosition:滚动视图竖直方向上的位置(0--1);
在text中需要空格的地方加入 <color=#FFFFFF00>缩进</color> 就可了,需要空几格就将“缩进”改为几个字
>
Canvas组件代表UI被放置和渲染的虚拟空间。全部的UI元素必须是带有Canvas组件的Gameobject的子物体。当我们创建一个UI元素从菜单的时候,如果场景中没有canvas,将自动创建一个canvas
元素的渲染顺序:
元素的渲染顺序和元素在Hierarchy中显示的一样,第一个子节点先渲染,后面的后渲染。如果两个UI元素重叠,后面渲染的会覆盖前面渲染的。
RenderMode(渲染模式):
UI渲染到场景的方式
Screen Space-Overlay,Screen Space-Camera 和 World Space
一个Canvas包括全部UIElements将是高效的,但是场景中有多个Canvases也是可能的。在Canvas中嵌套Canvas也是可能的,为了优化的目的嵌套Canvas将使用和父Canvas相同的渲染模式。
Screen Space-Overlay:
在这种模式下,Canvas大小适配之后直接渲染,不通过关联到场景或者摄像机。如果屏幕的大小变化UI将自动匹配大小。UI将覆盖其他图像比如摄像机视图。
Note:
The Screen Space-Overlay canvas需要放置在hierarchy的最上层。这是一种build-in limitation。保证Space-Overlay canvas可以正常显示
Screen Space-Camera:
在这种模式下,Canvas呈现方式好像它是在摄像机前一定距离的平面对象上绘制的一样。UI在屏幕上的大小不随着距离的变化而变化,如果屏幕大小或者分辨率变化UI将自动适应。任何3D objects在场景中相比UI plane到摄像机的距离更近,将渲染到UI的前面。
World Space:
这个模式下作为场景中的一个元素。不同于Screen Space-Camera,plane不需要朝向camera,canvas的大小将由视角和到摄像机的距离来决定,其他场景中的物体可以穿过canvas
此组件用于控制canvas种全部的UI元素的大小。这个设置将影响canvas下的全部物体。
Properties:
UI Scale Mode:
决定UI元素的大小在canvas中是由什么决定的:
Constant Pixel Size(固定大小,不随屏幕大小变化)
Scale With Screen Size (随着屏幕大小的变化而进行变化)
Constant Physical Size(保持物理大小,不随屏幕大小和分辨率变化)
在Constant Pixel Size模式下进行设置:
Scale Factor:设置canvas下全部的UI元素的大小
Reference Pixels Per Unit:像素与单位的对应关系
在Scale With Screen Size下进行设置:
Reference Resolution : UI 布局的分辨率,这个分辨率将随着屏幕分辨率进行变化
Screen Match Mode:如果当前分辨率的纵横比不适合参考分辨率,则用于缩放画布区域的模式
Match Width or Height Scale the canvas area with the width as reference, the height as reference, or something in between
Expand Expand the canvas area either horizontally or vertically, so the size of the canvas will never be smaller than the reference
Shrink Crop the canvas area either horizontally or vertically, so the size of the canvas will never be larger than the reference
Match:决定缩放的时候宽还是高作为引用
在Constant Physical Size下进行设置:
Physical Unit:设置物理单元的位置和尺寸。
Fallback Screen DPI:
Default Sprite DPI:
Reference Pixels Per Unit:
此组件用来控制一组的UI元素,不需要单独的处理他们,此组件也影响其子物体
Properties:
Alpha:此值从0到1,控制canvas及其下面全部子物体的alpha
interact able:决定组件是否可以被继承
Block Ray casts:此组件对Raycasts来说是否可以被视为collider
Ignore Parent Groups:是否受到父物体的CanvasGroup组件的影响,或者忽略他们
通常使用情况:
Canvas Renderer
此组件呈现包含图形化UI元素的对象
Property:
Text:组件显示的文本
Character:
Font:字体大小
Font Style:字体样式
Font Size:字体大小
Line Spacing:行间距
Rich Text:markup elements在text中是否支持
Paragraph:
Alignment:对齐方式
Align By Geometry:使用字形几何范围执行水平对齐,而不是字形度量
Horizontal Overflow:字体超出范围的解决方式
Vertical Overflow:字体太高超出范围的解决方式
Best Fit:Unity是否直接忽视大小属性,直接根据文本的大小匹配控件
Color:text的颜色
Material:渲染字体的材质
Hints:
Image控件显示的为Sprite类型,Raw Image可以接受任何类型的纹理
Properties :
Source Image:要现实的贴图
Color:要应用到上的颜色
Material:渲染的材质
Ray cast Target:可以被射线检测
Preserve Aspect:保留原始维度
Set Native Size:设置的维度到原始的像素大小
Raw Image可以显示任何类型的贴图
Property:
Texture:组件要显示的贴图
Color:
Material:
UV Rectangle:的偏移和大小
Details:通过修改UV Rectangle属性,可以缩放
此组件用来控制子控件的显示效果。mask将限制子元素的大小。如果子元素的大小比父元素大,将显示比父元素小的部分。
通常使用流程:
创建一个Panel对象,将需要显示的对象全部放到Panel对象下,给Panel添加一个Mask组件,全部的子物体只能显示在Panel范围内的部分
实现基于GPU的模板缓冲
对于大的区域显示很小的一部分使用RectMask2D。
RectMask2D的限制:
RectMask2D的优势:
1Shadow
给或者文字添加一个阴影效果
Properties:
Effect Color:阴影颜色
Effect Distance:阴影距离
Use Graphic Alpha:混合图像和效果的颜色
2OutLine
给文字或者添加描边效果。
Properties:
Effect Color:
Effect Distance:
Use Graphic Alpha:
3Position as UV1
添加一个简单的位置作为UV1效果给文本和图像
在unity3d的UGUI中给Text添加材质和艺术字,百度经验有详细的实例说明。
具体链接如下:
>
一、 UGUI布局系统由 布局元素 (Layout Elements)和 布局控制器 (Layout Controller)组成。
1、布局控制器的基础接口为ILayoutController。
(1)ILayoutController有两个方法,布局系统调用这两个方法的顺序是固定的,首先调用SetLayoutHorizontal,再调用SetLayoutVertical:
A、void SetLayoutHorizontal() :处理水平方向的布局;
B、void SetLayoutVertical() :处理垂直方向的布局。
(2)继承ILayoutController的两个接口:
A、ILayoutSelfController :只控制自己RectTransform的改变;继承ILayoutSelfController的两个类如下:
[1] (内容尺寸适配器) Content Size Fitter <—— ILayoutSelfController:根据孩子中布局元素的尺寸及自身包含内容的多少控制自身的尺寸;
[2] (纵横比适配器) AspectRatioFitter <—— ILayoutSelfController:根据自身设置的模式(AspectMode)和比率(Aspect Ratio)以及宽或高调整另一边的大小,不受子元素的影响。
B、ILayoutGroup :控制所有孩子节点的布局变化。这个接口就是我们比较熟悉的接口,平时项目中使用的很多布局组件都继承该接口:
[1] ScrollRect <—— ILayoutGroup;
[2] GridLayoutGroup <—— LayoutGroup <—— ILayoutGroup;
[3] HorizontalLayoutGroup\VerticalLayoutGroup->HorizontalOrVerticalLayoutGroup <—— LayoutGroup <—— ILayoutGroup
2、所有包含RectTransform组件的GameObject都视为布局元素。
(1)布局元素拥有一些定义自身尺寸的属性:
A、Minimum width:最小宽度;
B、Minimum height:最小高度;
C、Preferred width:如果有充足的空间可以分配的最合适宽度;
D、Preferred height:如果有充足的空间可以分配的最合适高度;
E、Flexible width:灵活宽度,一般是相对于父元素的比例;
F、Flexible height:灵活高度,一般是相对于父元素的比例。
默认情况下,Minimum width、Minimum height、Preferred width、Preferred height均为0,Flexible width、Flexible height都是disabled的。如果想调整这些属性就需要添加继承ILayoutElement接口的组件重写这些值。像我们常用的Text、Image组件都继承了ILayoutElement;同时一些布局控制器自身也继承了ILayoutElement,如:LayoutGroup(包括所有继承LayoutGroup的子类)、ScrollRect;UISystem也创建了一个单独组件LayoutElement继承ILayoutElement,任何一个想重写上述属性的GameObject都可以通过添加LayoutElement组件实现。LayoutElement同时继承了ILayoutIgnorer接口,可以通过设置ignoreLayout决定该GameObject是否被Layout System忽略。
(2)ILayoutElement定义了布局元素用到的属性minWidth、preferredWidth、flexibleWidth、minHeight、preferredHeight、flexibleHeight,
同时定义了两个方法:
void CalculateLayoutInputHorizontal():计算布局元素的minWidth,preferredWidth和flexibleWidth值
void CalculateLayoutInputVertical():计算布局元素的minHeight,preferredHeight和flexibleHeight值
二、布局重建过程
1、首先引起布局重建的元素调用LayoutRebuilderMarkLayoutForRebuild() ,然后逐层向上递归查找直到找到最上层的布局根节点,这个根节点必须包含继承ILayoutGroup接口、Behaviour类并且isActiveAndEnabled属性为true的组件。然后以这个根节点初始化一个布局重建器LayoutRebuilder,然后将该LayoutRebuilder添加到CanvasUpdateRegistry中m_LayoutRebuildQueue队列中等待处理。调用过程如下:
static void LayoutRebuilderMarkLayoutForRebuild(RectTransform rect)
->static void LayoutRebuilderMarkLayoutRootForRebuild(RectTransform controller)
->static bool CanvasUpdateRegistryTryRegisterCanvasElementForLayoutRebuild(ICanvasElement element)
-> CanvasUpdateRegistryInternalRegisterCanvasElementForLayoutRebuild(ICanvasElement element)
-> 加入m_LayoutRebuildQueue队列中。
其中有一个比较特殊的就是ScrollRect,在ScrollRect的OnEnable()方法和SetDirtyCaching()方法中会先调用CanvasUpdateRegistryRegisterCanvasElementForLayoutRebuild(this),再调用LayoutRebuilderMarkLayoutForRebuild(rectTransform)。与LayoutRebuilder比较,ScrollRect本身也继承了ICanvasElement接口。在Rebuild()函数中,ScrollRect针对CanvasUpdatePrelayout(布局执行前)和CanvasUpdatePostLayout(布局执行后)两个阶段实现了自己的执行逻辑。而LayoutRebuilder的Rebuild()函数只针对CanvasUpdateLayout阶段实现对应的执行逻辑
2、CanvasUpdateRegistry构造函数中会将PeformUpdate方法加入CanvaswillRenderCanvases事件中,然后在渲染所有的Canvas之前,抛出willRenderCanvases事件从而调用PeformUpdate(),在PeformUpdate函数中执行步骤如下:
(1)首先会删除m_LayoutRebuildQueue中所有无效的元素;
(2)然后根据节点的深度(父节点个数越大越靠前)对m_LayoutRebuildQueue排序;
(3)然后分别以CanvasUpdatePreLayout(布局前),CanvasUpdateLayout(布局),CanvasUpdatePostLayout(布局后)的参数顺序调用每一个ICanvasElement元素的Rebuild方法;
(4)然后调用所有ICanvasElement元素的LayoutComplete()方法。针对该方法只有LayoutRebuilder类中实现:将该LayoutRebuilder从LayoutRebuilder的静态对象池s_Rebuilders中删除;
(5)然后清空m_LayoutRebuildQueue队列;
(6)布局结束后调用ClipperRegistryinstanceCull()遍历所有裁剪组件(继承IClipper接口的组件,如RectMask2D)的裁剪方法PerformClipping()。
3、下面看一下ICanvasElement布局重建过程的实现,重建的实现就在LayoutRebuilder的Rebuild方法中,源码如下:
如上所示,整个布局分四个步骤:
(1)对该节点下所有有效(继承Behaviour且isActiveAndEnabled为true)的布局元素(即包含继承ILayoutElement组件的节点)执行CalculateLayoutInputHorizontal()计算水平方向布局尺寸。对孩子的遍历顺序由下往上,因为父节点尺寸计算依赖于子节点的尺寸;虽然针对所有布局元素,但是真正实现CalculateLayoutInputHorizontal()方法的只有LayoutGroup相关的组件。
LayoutGroup实现了一个虚方法CalculateLayoutInputHorizontal(),主要就是收集其子节点下所有没有被标记 ignoreLayout 的物体存到m_RectChildren列表中。LayoutGroup的子类重写该函数时都会先调用这个虚函数,然后再执行自己特有的逻辑。
A、 水平布局组件 HorizontalLayoutGroup <—— HorizontalOrVerticalLayoutGroup <—— LayoutGroup
重写CalculateLayoutInputHorizontal()。如上,首先调用LayoutGroup中CalculateLayoutInputHorizontal()方法,然后调用HorizontalOrVerticalLayoutGroup中的CalcAlongAxis(int axis, bool isVertical)方法,CalcAlongAxis()是一个公用方法,可以根据传入的参数确定计算哪个方向的尺寸,其中axis表示方向(0:horizontal 1:vertical),isVertical判断是否一个Vertical Group。CalcAlongAxis()执行过程如下:
① 首先遍历所有孩子节点调用GetChildSizes()方法获取对应方向上的尺寸(min、preferred、flexible);
② 然后根据所有子节点的尺寸计算当前节点对应方向上的尺寸totalMin、totalPreferred、totalFlexible;
③ 调用SetLayoutInputForAxis()方法将第二步计算的值设置对应的向量m_TotalMinSize、m_TotalPreferredSize、m_TotalFlexibleSize;
B、垂直布局组件VerticalLayoutGroup 重写方法如下,实现参考HorizontalOrVerticalLayoutGroup
(2)对该节点下所有布局控制器(即包含继承ILayoutController组件的节点)执行SetLayoutHorizontal()设置水平布局。对孩子的遍历顺序自上而下,因为孩子节点实际的布局依赖于父节点的布局;
A、HorizontalLayoutGroup和VerticalLayoutGroup中的SetLayoutHorizontal()会直接调用HorizontalOrVerticalLayoutGroupSetChildrenAlongAxis()方法根据布局方向和布局组件类型设置其下子布局元素的位置和尺寸。
B、GridLayoutGroup也重写了SetLayoutHorizontal()方法,直接调用SetCellsAlongAxis(0),针对水平布局实现如图2-4所示,只设置每个子元素的尺寸,而不会改变子元素的位置。
(3)对该节点下所有布局元素(即包含继承ILayoutElement组件的节点)执行CalculateLayoutInputHorizontal()计算垂直方向布局尺寸;对孩子的遍历顺序由下往上;
(4)对该节点下所有布局控制器(即包含继承ILayoutController组件的节点)执行SetLayoutVertical()设置垂直布局。对孩子的遍历顺序自上而下;
从上面的执行顺序还可以看出,Layout System先搞定水平方向的布局然后才去设置垂直方向的布局。
三、布局重建触发因素
1、 以下函数,都会直接或间接的调用LayoutBuilderMarkLayoutForRebuild()触发布局重建:
(1)OnEnable() :所有继承ILayoutController或ILayoutElement组件(AspectRatioFitter除外)的OnEnable()方法都会都会间接调用LayoutBuilderMarkLayoutForRebuild();
A、Graphic :OnEnable() -> SetAllDirty() -> ( m_SkipLayoutUpdate变量为false时才会调用 )LayoutBuilderMarkLayoutForRebuild();
B、LayoutGroup\ContentSizeFitter\LayoutElement\ScrollRect :OnEnable() -> SetDirty() -> LayoutBuilderMarkLayoutForRebuild()。
(2)OnDisable() :所有继承ILayoutController或ILayoutElement组件的OnDisable()方法都会调用LayoutBuilderMarkLayoutForRebuild()
(3)OnRectTransformDimensionsChange(): RectTransform尺寸变化时调用。继承自UIBehaviour的ContentSizeFitter、LayoutGroup、ScrollRect、Graphic都重写了该方法,具体调用如下:
A、ContentSizeFitter :OnRectTransformDimensionsChange() ->SetDirty() -> (IsActive()为true才会调用)LayoutRebuilderMarkLayoutForRebuild();
B、LayoutGroup :OnRectTransformDimensionsChange() ->(isRootLayoutGroup为true时才会调用)SetDirty() ->(IsActive()为true时才会调用)LayoutRebuilderMarkLayoutForRebuild();
C、ScrollRect :OnRectTransformDimensionsChange() -> SetDirty() ->( IsActive()为true时才会调用 )LayoutRebuilderMarkLayoutForRebuild();
D、Graphic :OnRectTransformDimensionsChange() ->( gameObjectactiveInHierarchy为true时才会调用 )SetLayoutDirty() ->(IsActive()为true时才会调用)LayoutRebuilderMarkLayoutForRebuild();
(4)OnDidApplyAnimationProperties(): 动画导致属性( 重写OnDidApplyAnimationProperties()方法的类自身所特有的属性 )改变时调用。继承UIBehaviour的Graphic、LayoutGroup、LayoutElement都重写了该方法,具体调用如下:
A、Graphic :OnDidApplyAnimationProperties() -> SetAllDirty() -> ( m_SkipLayoutUpdate变量为false时才会调用 )LayoutBuilderMarkLayoutForRebuild()。Graphic本身是个抽象类,不能当作组件直接添加,而继承自Graphic的Image\Text( ——> MaskableGraphic ——> Graphic)组件的一些特有属性,如图3-1红框内标记,当动画改变Text的这些属性时会调用OnDidApplyAnimationProperties()函数。如图3-2红框内标记,当动画改变Image的这些属性时会调用OnDidApplyAnimationProperties()函数。
B、LayoutGroup :OnDidApplyAnimationProperties() -> SetDirty() -> ( IsActive()为true时才会调用 )LayoutBuilderMarkLayoutForRebuild()
如图3-3、3-4、3-5分别是VerticalLayoutGroup、HorizontalLayoutGroup,当动画改变VerticalLayoutGroup的这些属性时会调用OnDidApplyAnimationProperties()函数。
C、LayoutElement :OnDidApplyAnimationProperties() -> SetDirty() -> ( IsActive()为true时才会调用 )LayoutBuilderMarkLayoutForRebuild()
如图3-6所示,当动画改变LayoutElement的这些属性时会调用OnDidApplyAnimationProperties()函数。
(5)OnBeforeTransformParentChanged() :父节点transform属性变化前调用。继承自UIBehaviour的Graphic和LayoutElement类都重写了该方法:
A、Graphic :OnBeforeTransformParentChanged() -> SetAllDirty() -> LayoutBuilderMarkLayoutForRebuild()
B、LayoutElement :OnBeforeTransformParentChanged() -> SetDirty() -> LayoutBuilderMarkLayoutForRebuild()
2、 某些组件特有属性变化或函数调用:
(1)RectTransform 中导致布局变化的属性:Width、Height、Scale、以及锚点变化;
(2)Text 中导致布局变化的属性:text、alignment、fontSize、horizontalOverflow、verticalOverflow、lineSpacing、fontStyle、resizeTextForBestFit、resizeTextMinSize、supportRichText、resizeTextMaxSize、font;方法:FontTextureChanged()。
(3)Image 中导致布局变化的属性:sprite、overrideSprite;方法:SetNativeSize()、OnCanvasHierarchyChanged()。其中OnCanvasHierarchyChanged()只有在canvasreferencePixelsPerUnit变化且Image类型为Sliced或Tiled时才会调用SetLayoutDirty()
(4)LayoutGroup 中导致布局变化的属性:padding、childAlignment;方法:OnTransformChildrenChanged()
(5)GridLayoutGroup 中导致布局变化的属性:startCorner、startAxis、cellSize、spacing、constraint、constraintCount
(6)HorizontalOrVerticalLayoutGroup 中导致布局变化的属性:spacing、childForceExpandWidth、childForceExpandHeight、childControlWidth、childControlHeight、childScaleWidth、childScaleHeight
(7)ContentSizeFitter 中导致布局变化的属性:horizontalFit、verticalFit
(8)LayoutElement 中导致布局变化的属性:ignoreLayout、minWidth、minHeight、preferredWidth、preferredHeight、flexibleWidth、flexibleHeight、layoutPriority
(9)ScrollRect 中导致布局变化的属性:verticalScrollbar、horizontalScrollbar、horizontalScrollbarVisibility、verticalScrollbarVisibility、viewport
四、布局重建分析工具
1、第三节我们总结了一些可能导致布局重建的原因,游戏中尽量避免执行这些 *** 作以减少布局重建,同时尽可能少的使用Layout相关组件以减少CPU时间的占用。通过第二节对重建过程的分析,我们知道每个引起布局重建的元素的元素都会先加入CanvasUpdateRegistry中m_LayoutRebuildQueue队列中,所以我们可以通过反射的方式来获取游戏中引起布局重建的元素(引用 >
以上就是关于Unity-UGUI基础全部的内容,包括:Unity-UGUI基础、Unity之UGUI Text文本中中文字体书写格式(开头空格)、Unity-UI(UGUI详解)02.1 Canvas组件、Visual组件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)