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。
除了你最初的问题。按照你做这一切的原因(根据文本内容展开文本框)。
您可以在文本对象上使用内容大小筛选器组件,并将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);
我发现Font.RequestCharactersInTexture(mStr, fontSize, FontStyle.Normal)
是ok的,但Font.RequestCharactersInTexture(mStr, fontSize, FontStyle.Bold)
将得到字符。Advance = 0