微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

2D Unity:将基于文本的UI元素扩展到底部

如何解决2D Unity:将基于文本的UI元素扩展到底部

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

  • 垂直布局组(四边各占20,有效控制子尺寸大小)
  • 图片
  • 内容大小适合者(垂直拟合设置为首选大小,水平不受限制)

此InfoBox内是一个Text-Element,每次我更新文本时,我都希望InfoBox展开或折叠,但只能扩展到底部。现在,我的InfoBox始终会在顶部和底部同时展开或折叠,但是我不希望这种情况发生。我该如何实现?我添加了一些屏幕截图,以更好地形象化这一点。

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

InfoBox Settings

这些是我对文本的设置:

Text Settings

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

How it should not be

任何帮助都非常感谢!

解决方法

您的主要问题似乎是在父对象上也使用了ContentSizeFitter。因此,这取决于此父对象与其相应父对象的对齐方式。

我知道这句话听起来很奇怪,但是您所做的基本上是将对齐责任移交给了父母。

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

您只需为此设置

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

或直接转到RectTransform检查器,打开对齐工具并按住 Shift + Alt 并单击顶部对齐:

enter image description here


第二步,而不是使用ContentSizeFitter,我更喜欢拥有自己的脚本,该脚本仅执行应做的事情,而已。

您可以获得preferredHeight,它正是您想要的值。

以下脚本仅始终将首选高度应用于文本rect。使用[ExecuteAlways]也可以在编辑模式下使用。只需将其与GameObject组件安装在同一UI.Text

[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;
    }
}

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。