【问题标题】:Unity Vertical Layout Group height not calculating off childrenUnity垂直布局组高度不计算子级
【发布时间】:2021-10-28 17:39:39
【问题描述】:

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

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

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

这是我的演示。我在 VLG 中有一系列孩子,他们的 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 设置:

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

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

    【讨论】:

    • 哦,有趣。垂直布局组不会自行重新计算大小?它需要添加这个额外的行为来重新计算吗?但是,是的,我可以确认这是我想要的!谢谢!
    • 很高兴它有帮助!这是我在一些商业 Unity 游戏中看到的方法。我认为这个想法是子游戏对象通常不应该控制父游戏对象的变换,因此它需要一个专门用于打破此规则的单独组件,不会为意外使用留下空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2011-07-18
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2021-06-10
    • 2014-03-06
    相关资源
    最近更新 更多