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