如何消除Unity3D中按钮之间的间距?

Llo*_*oyd 3 c# layout button spacing unity-game-engine

我正在 Unity 中设计的游戏中以编程方式创建按钮。我实例化按钮预制件并将其作为画布上的 Panel 对象的父级。我已将面板设置为具有具有以下属性的水平布局组:

在此输入图像描述

我已将以下组件添加到按钮预制件中以实现我需要的外观:

在此输入图像描述

完成所有这些之后,我得到的结果是:

在此输入图像描述

因此,我的问题是,如何删除每个按钮之间的间距?这些按钮应该彼此相邻(但不重叠),看起来像一个句子。我使用单独按钮的原因是用户需要单击句​​子中正确的 2 个字母字符(在上面的示例中是字母ar)。我已将属性的间距设置为0并选中/取消选中各种选项,但没有运气!

我已取消选中面板和按钮对象上“儿童强制展开”的宽度选项,但句子看起来很拥挤......我如何确保按钮整齐地一个接一个地放置(即不重叠)?

在此输入图像描述

与以下评论相关的代码:

 for (int i = 0; i < letterArray.Length; i++)
        {
            button = (GameObject)Instantiate(buttonPrefab);
            button.transform.SetParent(buttonPanel.transform, false);
            button.GetComponentInChildren<Text>().text = letterArray[i];

            FitButtonWidthToText();
        }
    }

    public void FitButtonWidthToText()
    {
        int widthOfTheText = 0;
        CharacterInfo characterInfo;
        foreach (char c in button.GetComponentInChildren<Text>().text)
        {
            button.GetComponentInChildren<Text>().font.GetCharacterInfo(c, out characterInfo, button.GetComponentInChildren<Text>().fontSize);
            widthOfTheText += characterInfo.advance;
        }
        buttonTransform.sizeDelta = new Vector2(widthOfTheText, buttonTransform.sizeDelta.y);
    }
Run Code Online (Sandbox Code Playgroud)

hug*_*ugo 5

取消选中子强制展开:宽度

\n\n

来自文档

\n\n
\n

儿童力量 展开:是否强制子布局元素展开以填充额外的可用空间。

\n
\n\n

检查宽度(或高度)将使元素水平填充可用空间(或垂直))填充可用空间。

\n\n
\n\n

编辑:不要Content Size Fitter放在Layout Group的子级上。详细信息:使 UI 元素适合其内容的大小

\n\n

根据我们的讨论:因此上述链接中描述的步骤仅适用于最新版本的 Unity。如果您坚持使用更成熟的版本,您可以保留 ContentSizeFitter达到所需的结果,但有一个问题是,如果您更改子元素的大小,布局将\xe2\x80\x99t 自动更新,如您所期望的。为了解决这个问题,您可以强制部分重新布局,Stephan-B此线程中所解释的那样中所解释的那样:

\n\n
\n

下面的函数LayoutRebuilder.ForceRebuildLayoutImmediate应该很有用。您可以在层次结构中的根(顶级父级)对象上调用此函数,该对象包含影响相关对象的布局组件,而不是强制重建所有可能对性能产生重大影响的画布。

\n
\n