ContentSizeFitter:
该组件可以帮我们在空间内容发生变化导致空间尺寸改变时,重新计算RectTransform。
但在复杂的UI应用中,可能我们给文本赋值后,没有正确地计算RectTransform,那么我们需要手动触发计算:
ContentSizeFitter csf;
csf.enable = false;
csf.enable = true;
如果这时空间本身地activeSelf=false,那么上面地调用也不会触发计算,我们需要在activeSelf=true的下一帧执行触发计算。
更新RectTransform
改变RectTransform的top
GetComponent<RectTransform>().offsetMax = new Vector2(GetComponent<RectTransform>().offsetMax.x, top);
改变RectTransform的bottom
GetComponent().offsetMin = new Vector2(GetComponent().offsetMin.x, bottom);
改变RectTransform的width,height
GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);
改变RectTransform的pos
GetComponent<RectTransform>().anchoredPosition3D = new Vector3(posx,posy,posz);
GetComponent<RectTransform>().anchoredPosition = new Vector2(posx,posy);
Text
获取文本显示的宽高
Text txtObject;
String str;
TextGenerationSetting settings = txtObject.GetGenerationSettings(Vector2.zero);
Vector2 sz = Vector2.zero;
sz.x = txtObject.cachedTextGeneratorForLayout.GetPreferedWidth(str, settings);
sz.y = txtObject.cachedTextGeneratorForLayout.GetPreferedHeight(str, settings);
获取文本mesh构造信息
Text txtObject;
String str;
TextGenerationSetting settings = txtObject.GetGenerationSettings(Vector2.zero);
UICharInfo[] arrCh = txtObject.cachedGeneratorForLayout.Populate(str, settings);
UICharInfo存储了构造Mesh需要的数据
获取文本在RectTransform内显示的行数(宽度固定)
遍历UICharInfo,累计UICharInfo.charWidth,如果宽度超过RectTransform.sizeDelta.x,则换行。
Sprite 及图集
打包设置
- 在Project窗口内,右键鼠标->Create->Sprite Atlast,创建Atlas
- 选中创建的Atlas,在Objects For Packing列表,点+号,添加,并将图标目录拖上来
- 在Project Settings->Editor的Sprite Packer的Mode,选择always enabled
加载图集
SpriteAtlas spriteAtlas = Resources.Load<SpriteAtlas>("SpriteAtlas");
transform.Find("icon").GetComponent<Image>().sprite = spriteAtlas.GetSprite("ToolTip_Bg_0");
//sprite
Sprite[] spriteArray = new Sprite[spriteAtlas.spriteCount];
//spriteArray得到数组
spriteAtlas.GetSprites(spriteArray);
ScrollRect
如果控件没有Image组件,则Mask不起作用
重新打开时,滚动到顶端:scrollRect.content.localPosition = Vector2.zero;
来源:CSDN
作者:lrh3025
链接:https://blog.csdn.net/lrh3025/article/details/103646503