在滚动矩形中组合文本和按钮

Combine text and buttons in scroll rect

我正在尝试创建一个可滚动的 UI 对象,它有两个部分,一个在另一个之上:一个文本部分和一个按钮列表部分。我的主要问题是文本和按钮列表的大小会根据播放器正在查看的内容而变化。

似乎只是将文本和按钮放入一个空的 UI 对象中是行不通的,因为空的游戏对象不会占用其子项的大小,而且空对象不会有自己的大小,无法滚动浏览其内容。

是否有我不知道的元素可以帮助我?

这是我用于 Scroll 的设置。您似乎缺少第三个对象,即内容对象。它使用 Content Size FitterLayout Group 决定内容大小的物理大小。我决定包括整个设置,以防万一您遗漏了其他内容。

Parent Object (Mask OR Rect Mask 2D) - Object that is the visual bounds of your UI
     -> Scroll Object (ScrollRect) - Actual scroll component that drives the UI scroll
          -> Content Object (Horizontal OR Vertical Layout Group AND Content Size Fitter) - Is the parent of your actual data in your scroll 

为了更好地解释这一点,Mask 用于当您拥有非矩形资产但仍希望成为最大观看范围时。此 Mask 之外的任何内容都不会被渲染。 Mask 比 Rect Mask 2D 更昂贵,因此如果您的视口是正方形或矩形,则使用 2D 组件。

Scroll Rect是Unity中UI元素滚动的驱动。如果它是水平的或垂直的,请务必选中该框。我假设在您的用例中您使用的是垂直。确保将 Content 字段设置为该对象的子项,将 Viewport 字段设置为父项(掩码)。

内容对象有两个组件。第一个是 Content Size Fitter ,它将强制此对象为其内容的大小。如果您的滚动条是垂直滚动条,请将 Vertical Fit 设置为 Preferred Size,并将 Horizontal Fit 设置为 Unconstrained size。如果是相反的,那就和刚才说的相反设置。此对象上的另一个组件是 Horizontal Layout Group Vertical Layout Group。不同之处在于滚动的方向。该对象设置中的复选框非常重要。查看 docs 了解每个人的作用。

如果您按照我指定的方式附加组件并在布局组上设置适当的设置,您应该能够拥有尽可能多的动态对象,并在文本和按钮之间交换大小可变的对象。

如果您有任何其他问题,请告诉我。 UI 一开始可能有点令人生畏,但一旦你弄明白了,它就会变得容易得多。

编辑: 要实现可以使用文本对象和按钮更改大小的对象,您需要结合使用内容大小调整器和布局组。

这是一个层次结构示例

这是结果

结合使用布局组和内容装配器可强制文本所在的容器达到所需的大小。如果您要使这些资产静态化,这意味着 none 它在运行时是数据驱动的,那么这应该会立即起作用。如果您在运行时更改此数据,则需要对父对象使用 LayoutRebuilder 以确保布局正确重建。如果您有任何问题,请告诉我。