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)
取消选中子强制展开:宽度
\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\n下面的函数LayoutRebuilder.ForceRebuildLayoutImmediate应该很有用。您可以在层次结构中的根(顶级父级)对象上调用此函数,该对象包含影响相关对象的布局组件,而不是强制重建所有可能对性能产生重大影响的画布。
\n