如何在 Unity 中拥有具有不同单元格高度的网格布局组件

Posted

技术标签:

【中文标题】如何在 Unity 中拥有具有不同单元格高度的网格布局组件【英文标题】:How to have grid layout components with different cell heights in Unity 【发布时间】:2017-09-17 22:49:39 【问题描述】:

我正在尝试在我的 2D 游戏中构建一个场景,该场景有一个面板,其元素排列如下图所示:

ScrollRect 应在用户向InputField 提供值后动态添加行,从Dropdown 中选择一个选项,然后单击Button。这一切都很好,除了ScrollRect 的可视区域与父面板中的兄弟姐妹具有相同的垂直大小。

发生这种情况是因为父面板的GridLayoutGroup 需要指定子单元格大小,如果我指定了一个对前两个面板有意义的值,那么它对于ScrollRect 来说太短了。在父面板上放置 ContentSizeFitter 并没有帮助(此外,尽管 Unity 警告它,在 ScrollRect 的内容上有一个 ContentSizeFitter,因为没有一个新添加的行在滚动时不会出现)。

所以我的问题是:

当一个孩子的垂直尺寸会动态变化时,我需要做什么才能让顶层面板的孩子的垂直尺寸基于它们的尺寸?强>

谢谢!

【问题讨论】:

【参考方案1】:

对于网格布局,您无法动态控制单元格大小。相反,您可以使用水平/垂直布局组,您可以在其中找到选项控制子大小。如上所述,将 Layout 元素添加到子组件并调整大小

【讨论】:

【参考方案2】:

@Programmer 和@Salma572 的答案都是正确的。如果您希望该大小为固定数字或像素,请使用LayoutElement。但是,您似乎不能使用比例(百分比)或其他任何动态。

很遗憾,但您可能需要编写一个脚本。

【讨论】:

【参考方案3】:

这是可能的。将Layout Element 组件附加到每个子游戏对象。然后,您可以通过修改Layout ElementPreferred WidthHeight 变量来动态更改每个子游戏对象的大小。

【讨论】:

我试过了,但它不起作用;子级只保留父级网格布局组设置的单元格大小。 Layout Element 的作用就是做这件事情。你可能做错了我不知道的事情。 这里有同样的问题。 Vertical/Horizo​​ntal Layout Group with Control Child Height/Width 将允许 Preferred Width/Height 影响孩子,但 Grid Layout Group 没有这样的设置。在这两种情况下,无论如何都不支持比例大小,因此正如 MrDos 所说,您需要一个脚本来手动设置单元格大小......或者如 Salma572 所说,结合垂直/水平布局,但您需要重新计算每行/列的 nb 个元素用于分发。如果 Grid 具有与 Vertical/Horizo​​ntal Layout 相同的选项,那就太好了!

以上是关于如何在 Unity 中拥有具有不同单元格高度的网格布局组件的主要内容,如果未能解决你的问题,请参考以下文章

网格布局android / kotlin中单元格的高度和宽度相同

颤动中具有相同单元格高度的动态交错网格

如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?

在水平滚动中具有不同高度到顶部的集合视图引脚单元格

集合视图具有多个部分的不同单元格高度

WPF:将控件高度设置为填充网格行高