Unity UI自动拓展布局

Unity UI自动拓展布局

最近策划又改了一版UI设计,增加了很多需要根据文字数量、道具数量等自动拓展的UI,Unity自带的组件就可以很轻松的实现这样的效果。

首先文字自动拓展很简单,只需要在Text物体里增加个ContentSizeFItter组件,选择你需要的拓展方式(横向和纵向)将其选择PreferredSize选项就可以了。

那么再往上,如果需要文字拓展带动上层拓展的话,就需要在文字父物体上加上两个组件,第一个是LayoutGroup组件,这个组件有三个,分别是Grid(网格)、Horizontal(横向)、Vertical(纵向)布局,根据需要添加合适的就可以。另一个组件就是ContentSizeFItter了。当你加上这两个组件后,你会发现文字上的ContentSizeFItter组件会出现黄色的感叹号,大致意思是你父物体已经有布局组件了,你应该用这个布局组件来控制。这个时候你其实就可以把Text上的ContentSizeFItter组件移除了,在父物体的布局组件中ControlChildSize勾选你需要控制的方向。一般来说就没有问题了。

如果你的UI布局很复杂,有好几层需要拓展的,只需要最上层的那个物体增加ContentSizeFItter组件,其他子物体都不需要增加该组件。每一层的布局组件中的ControlChildSize都是独立的,如果你发现当你选择控制子物体大小后,子物体有缩在一起的情况,那么一定是你的子物体存在空物体的情况,也就是你用空物体作为父物体来做层级管理。出现这种情况你可以给这个空物体增加LayoutElement组件,然后勾选MinHeight,并在后面写上最小的间距,这个组件可以设置你空物体最小分配。

最后,如果你按照我说的做了之后,发现还是有个别的特别不听话,怎么整都整不好,还有个终极办法,所有的布局组件不勾选ControlChildSize,全都增加ContentSizeFItter组件,然后等需要刷新布局的时候,在代码中调用:LayoutRebuilder.ForceRebuildLayoutImmediate(RectTransform);
这个代码,RectTransform是你的最上层带有布局组件的RectTransform。这段代码最好是延迟一帧调用,当然你也可以Update中刷新。

猜你喜欢

转载自blog.csdn.net/weixin_37836657/article/details/127244442