如何在 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 Element
的Preferred Width
和Height
变量来动态更改每个子游戏对象的大小。
【讨论】:
我试过了,但它不起作用;子级只保留父级网格布局组设置的单元格大小。 Layout Element 的作用就是做这件事情。你可能做错了我不知道的事情。 这里有同样的问题。 Vertical/Horizontal Layout Group with Control Child Height/Width 将允许 Preferred Width/Height 影响孩子,但 Grid Layout Group 没有这样的设置。在这两种情况下,无论如何都不支持比例大小,因此正如 MrDos 所说,您需要一个脚本来手动设置单元格大小......或者如 Salma572 所说,结合垂直/水平布局,但您需要重新计算每行/列的 nb 个元素用于分发。如果 Grid 具有与 Vertical/Horizontal Layout 相同的选项,那就太好了!以上是关于如何在 Unity 中拥有具有不同单元格高度的网格布局组件的主要内容,如果未能解决你的问题,请参考以下文章
网格布局android / kotlin中单元格的高度和宽度相同