2D Unity:根据文本展开 UI 元素到底部

2D Unity: expand UI element based on text to the bottom

我有一个游戏对象 (InfoBox) 带有..

此信息框内是一个文本元素,每次更新文本时,我都希望信息框展开或折叠,但仅限于底部。现在我的 InfoBox 总是在顶部和底部展开或折叠,但我不希望这种情况发生。我怎样才能做到这一点?我添加了一些屏幕截图以更好地形象化这一点。

这些是我对信息框的设置:

这些是我对文本的设置:

这就是当我使用更少的文本时发生的情况,框从底部和顶部折叠,但我希望它固定在顶部(与旁边的绿色框在同一行)并且仅在底部折叠:

非常感谢任何帮助!

你的主要问题看起来你也在 parent object 上使用了 ContentSizeFitter。所以这取决于这个 parent object 如何与其对应的 parent.

对齐

我知道这句话听起来很奇怪,但你所做的基本上是将对齐责任转移到 parent。

=> 使您的 UI 元素与顶部对齐并向下增长。

为此你需要做的就是设置

  • 最小锚点 -> 1
  • 锚最大 y -> 1
  • y 轴 -> 1

或者只需转到 RectTransform 检查器,打开对齐工具并按住 Shift + Alt 然后单击顶部对齐:


对于第二个而不是使用 ContentSizeFitter 我更喜欢有我自己的脚本,它只做它应该做的事,仅此而已。

您可以获得 preferredHeight,这正是您要查找的值。

以下脚本总是将首选高度应用于文本矩形。使用 [ExecuteAlways] 这也适用于编辑模式。只需将其附加到与 UI.Text 组件

相同的 GameObject
[ExecuteAlways]
[RequireComponent(typeof(Text))]
[RequireComponent(typeof(RectTransform))]
public class TextHeightFitter : MonoBehaviour
{
    [SerializeField] private RectTransform _rectTransform;
    [SerializeField] private Text _text;

    private void Update()
    {
        if (!_text) _text = GetComponent<Text>();
        if (!_rectTransform) _rectTransform = GetComponent<RectTransform>();

        var desiredHeight = _text.preferredHeight;
        var size = _rectTransform.sizeDelta;
        size.y = desiredHeight;
        _rectTransform.sizeDelta = size;
    }
}