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

本文关键字:字体 字符 取文本 获取 Unity | 更新日期: 2023-09-27 18:17:29

我想使用c#在unity中获得文本的宽度。

这就是我要做的。

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。

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

除了你最初的问题。按照你做这一切的原因(根据文本内容展开文本框)。

您可以在文本对象上使用内容大小筛选器组件,并将Horizontal Fit属性设置为Preferred Size。这将解决你的问题。

更新:

添加布局元素组件以及设置首选宽度值为500,例如设置文本的Horizontal Overflow属性为Wrap。这肯定会起作用。

尝试呼叫:font.RequestCharactersInTexture(c.ToString(), text.fontSize, text.fontStyle);

呼叫前:font.GetCharacterInfo(c, out characterInfo, text.fontSize);

除了''t',我用这种方法得到了我需要的所有字符。(也许最好一次请求所有字符)。

也许你的字体是动态的:这意味着你必须在你的字体中添加字符,你应该使用font . requestcharactersintexture !这发生在我使用单个UnityEngine.UI.Text组件时,不管字体是什么。参考:https://docs.unity3d.com/ScriptReference/Font.RequestCharactersInTexture.html

try use: font.RequestCharactersInTexture(c.ToString());

字形大小,fontStyle使用默认值

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

然后我得到了正确的值characterinfo。advance

我发现Font.RequestCharactersInTexture(mStr, fontSize, FontStyle.Normal)是ok的,但Font.RequestCharactersInTexture(mStr, fontSize, FontStyle.Bold)将得到字符。Advance = 0