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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity C#,获取文本宽度/字体字符宽度相关的知识,希望对你有一定的参考价值。

我希望使用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。

答案

除了你原来的问题。以下是您正在执行此操作的原因(根据文本内容扩展文本框)。

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

更新:

例如,添加Layout Element组件并将首选宽度值设置为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

另一答案

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

字体大小和字体样式使用默认值。

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

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

以上是关于Unity C#,获取文本宽度/字体字符宽度的主要内容,如果未能解决你的问题,请参考以下文章

ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?

如何在 DirectWrite 中为倾斜字体获取正确的文本宽度?

如何计算已知字体大小和字符的 WPF TextBlock 宽度?

如何在 Android 文本视图中设置字体宽度?

获取特定字体配置中文本的实际宽度?

如何在颤动中获取动态文本小部件的宽度?