【Unity3D】嵌套使用Layout Group制作拥有动态子物体高度的Scroll View

1:本解决方案参考 StackOverFlow

2:本解决方案只使用UGUI自带的组件,不造轮子

3:下文使用UGUI自带的Scroll View组件,由于Scroll View和Content都是Unity自带的命名,因此不再赘述其具体的功能

如何制作拥有动态子物体高度的ScrollView

需求

搭建聊天界面或者其他需要根据子物体具体高度(宽度同理)动态改变的界面

想要的效果

图片来源于网络,侵删

遇到的问题

由于通常的做法是ScrollView组件下的Content挂载某个(Grid/Horizontal/Vertical)LayoutGroup,然后通过调节LayoutGroup上的属性来控制子物体的宽高,这样的做法会导致每一个子物体都有相同的宽高,而无法根据子物体的具体高度(比如想根据子物体的Text上的文字数量来自动调整整个子物体的高度,从而调整整个ScrollView的高度)

解决方案

ScrollView 下的 Content 挂载 ContentSizeFitter (Vertical Fit = Preferred Size) 和 Vertical Layout Group(Child Controls Size Width / Height = true),ContentSizeFitter主要作用是根据子物体的宽高来调节Content的宽高,Child Controls Size是让子物体能够自己控制自己的宽高,注意这里不要选择Child Force Expand ,否则子物体的宽高又不能控制了。
在这里插入图片描述
聊天界面一般由头像和对话框组成,那么我们就可以通过在根节点添加Horizontal Layout Group(因为头像和对话框一般是横向布局的),然后对话框添加Vertical Layout Group来控制自身纵向的高度。
在这里插入图片描述
此时你会发现头像的RectTransform宽高都不能设置了,因为你在子物体的根节点使用了Horizontal Layout Group控制了头像和对话框的布局。
在这里插入图片描述
想设置其宽高也很简单,只要在头像上挂载 Layout Element ,然后调节Min Width/Min Height 和 Preferred Width/Preferred Height即可。
在这里插入图片描述

一个小技巧

现在的聊天界面填充方向是从上往下的(即 Pivot = (0.5,1)),若想从下往上,则需要调节父物体的Pivot = (0.5,0),原理不明,还请各位老师赐教

在这里插入图片描述

最终效果

在这里插入图片描述

原文来自 CSDN博主 【趁着头发多我想做游戏】https://blog.csdn.net/weixin_37658157/article/details/104558947 转载请注明出处

猜你喜欢

转载自blog.csdn.net/weixin_37658157/article/details/104558947
今日推荐