0

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

似乎只是将文本和按钮扔到一个空的 UI 对象中是行不通的,因为空的游戏对象不会占用其子对象的大小,并且由于空对象没有自己的大小,因此滚动其内容不可能。

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

4

1 回答 1

1

这是我用于 Scroll 的设置。您似乎缺少第三个对象,即内容对象。Content Size Fitter它是使用 a和 a决定内容大小的物理大小的原因Layout 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 比 Rect Mask 2D 更昂贵,因此如果您的视口是正方形或矩形,则使用 2D 组件。

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

内容对象上有两个组件。第一个是Content Size Fitter将强制此对象成为其内容的大小。如果您的滚动是垂直滚动,请将 设置Vertical Fit为 Preferred Size 并将 保留Horizontal Fit为 Unconstrained size。如果是相反的,那么设置我刚才说的相反。此对象上的另一个组件是 a Horizontal Layout Group OR a Vertical Layout Group。不同之处在于您的滚动方向。该对象设置中的复选框非常重要。查看每个文档的功能。

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

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

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

这是一个示例层次结构 等级制度

这是结果结果

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

于 2021-04-17T22:16:26.177 回答