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 中为倾斜字体获取正确的文本宽度?