0

我想使用 C# 统一获取文本的宽度。

这是我想要做的。

int GetWidthOfMessage(string message)
{
    int totalLength = 0;

    Font font = text.font; //text is my UI text
    CharacterInfo characterInfo = new CharacterInfo();

    char[] arr = message.ToCharArray();

    foreach (char c in arr)
    {
        font.GetCharacterInfo(c, out characterInfo, text.fontSize);
        totalLength += characterInfo.advance;
    }

    return totalLength;
}

但是 font.GetCharacterInfo(...) 返回 false 并且 characterInfo.advance 对于任何字符都是 0 。

4

4 回答 4

3

除了你原来的问题。遵循您执行所有这些操作的原因(根据文本内容扩展文本框)。

您可以在文本对象上使用Content Size Fitter组件并将Horizontal Fit属性设置为Preferred Size. 这将解决您的问题。

更新:

还添加Layout Element组件,并将首选宽度值设置为 500,例如,将Horizontal Overflowtext 的属性设置为Wrap. 这肯定会奏效。

于 2016-11-10T14:04:07.567 回答
0

尝试调用:font.RequestCharactersInTexture(c.ToString(), text.fontSize, text.fontStyle);

致电前:font.GetCharacterInfo(c, out characterInfo, text.fontSize);

除了 '\t',我得到了我需要的每一个字符。(不过,一次请求所有字符可能更好)。

于 2018-02-09T00:39:04.907 回答
0

尝试使用:font.RequestCharactersInTexture(c.ToString());

fontSize & fontStyle 使用默认值。

然后使用:GetCharacterInfo(char ch, out characterInfo info);

然后我得到了 characterInfo.advance 的正确值

于 2019-01-28T11:08:08.533 回答
0

也许你的字体是动态的:这意味着你必须在你的字体中添加字符,你应该使用 Font.RequestCharactersInTexture!这发生在我身上,只有一个 UnityEngine.UI.Text 组件,无论字体如何。参考:https ://docs.unity3d.com/ScriptReference/Font.RequestCharactersInTexture.html

于 2018-11-23T11:00:21.673 回答