unity3d - Unity Vertical Layout Group 高度不计算子项

标签 unity3d

我觉得我不了解 Unity 2020.3.21 中的 Vertical Layout Group 组件,我希望有人能解释我缺少的内容。

我有一系列运行时控制的 UI 组件,我希望它们从上到下垂直显示。我需要能够在运行时打开和关闭这些组件,并让父垂直布局组大小自动更新为所有事件子组件的高度。这正是垂直布局组应该处理的事情,对吧?

当我构建一个简单的示例时,我看到垂直布局组将子项正确定位在垂直列表中。然而,它在测量自己的高度时完全忽略了 children 的体型。这是一个问题,因为我希望能够将此容器放入 ScrollView 中——如果高度不准确,则 ScrollView 无法正常工作。

这是我的演示。我在 VLG 中有一系列 child ,他们的 RectTransform 中都有明确的设置高度。它们都是 VLG 的直接子代。它们都不使用 LayoutElement;所有高度都在 RectTransform 中明确定义。这是场景层次结构,括号中是每个组件的编译时 RectTransform 高度。

Canvas (325x812)
  GameObject (812)
    Vertical Layout Group (100)
      Text (45)
      Spacer (100)
      Text Input (48)
      Spacer (20)
      Button (48)

这是我的 VLG 设置:

enter image description here

当我运行游戏时,我可以在 Scene 选项卡中看到每个 UI 对象的轮廓。 children 显然已经确定了他们的高度。然而,VLG 仍然具有 100 的静态编译时高度,而不是子高度的总和。

我是否遗漏了有关垂直布局组如何工作的信息?我怎样才能让这个 VLG 在运行时将它的 Height 属性设置为它的事件子项的实际总高度?

最佳答案

将垂直适合设置为首选大小的 ContentSizeFitter 应该可以解决问题。我根据您的示例使用简化结构进行了快速测试,并正确计算了高度(子对象的高度为 100+50+75):

Test example

关于unity3d - Unity Vertical Layout Group 高度不计算子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69758674/

相关文章:

c# - 在Unity中序列化和反序列化Json和Json数组

unity3d - 如何在 Unity3d 中通过平面切割网格

c# - Unity C# 脚本中未调用重写虚函数

c# - 使用NAudio在Unity中创建AudioClip,在读取数据时卡住1-2秒

c# - Unity C#中 "Missing Reference Exception"和 "Null Reference Exception"的区别

c# - Unity3d c# 在 Vector3 (xyz) 列表中找到 x 的最大值

unity3d - 以编程方式检查 Assets 更新

c# - 如何从 byte[] 中的音频文件创建 AudioClip

c# - 如何在运行时在 Unity 中更改对象的图层?

c# - Unity 5.3.5f1在播放模式下崩溃