Unity C#,获取文本宽度/字体字符宽度

时间:2016-11-10 13:38:16

标签: c# unity3d text-width

我希望使用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 个答案:

答案 0 :(得分:3)

除了你原来的问题。以下是您正在做这一切的原因(根据文本内容扩展文本框)。

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

<强>更新

添加Layout Element组件并将首选宽度值设置为500,并将文本的Horizontal Overflow属性设置为Wrap。这肯定会起作用。

答案 1 :(得分:0)

尝试致电:font.RequestCharactersInTexture(c.ToString(), text.fontSize, text.fontStyle);

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

除了&#39; \ t&#39;之外,我得到了我需要的每一个角色。 (可能最好一次请求所有角色)。

答案 2 :(得分:0)

也许您的字体是动态的:这意味着您必须在字体中添加字符,并且应该使用Font.RequestCharactersInTexture!不管字体如何,这都是通过单个UnityEngine.UI.Text组件发生的。 参考:https://docs.unity3d.com/ScriptReference/Font.RequestCharactersInTexture.html

答案 3 :(得分:0)

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

fontSize和fontStyle使用默认值。

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

然后我得到正确的characterInfo.advance