【发布时间】:2014-02-05 04:19:12
【问题描述】:
我正在用 Unity3D 开发一个游戏,它是 OnGUI() 函数中的 GUI 代码。在我可以在新的 Rect() 参数中指定其尺寸之前,有没有办法使用 GUIStyle [和字体] 获取 GUI 标签的大小?如果有任何可能的方法,我可以使用它来根据屏幕分辨率等某些因素动态更改标签的尺寸......
【问题讨论】:
标签: c# unity3d unityscript
我正在用 Unity3D 开发一个游戏,它是 OnGUI() 函数中的 GUI 代码。在我可以在新的 Rect() 参数中指定其尺寸之前,有没有办法使用 GUIStyle [和字体] 获取 GUI 标签的大小?如果有任何可能的方法,我可以使用它来根据屏幕分辨率等某些因素动态更改标签的尺寸......
【问题讨论】:
标签: c# unity3d unityscript
如果您使用 Unity,则不应使用 System.Drawing。 请改用http://docs.unity3d.com/Documentation/ScriptReference/GUIStyle.CalcSize.html。 例如:
Vector2 size = yourStyle.CalcSize (new GUIContent ("your text"));
如果您使用当前皮肤中指定的样式,请将 yourStyle 替换为 GUI.skin.[...] (http://docs.unity3d.com/Documentation/ScriptReference/GUISkin.html)。
然后你可以这样使用它:
GUI.Label (new Rect (anchorX, anchorY, size.x, size.y), "your text");
【讨论】:
我不确定它是否适用于您的情况,但可能会帮助您朝着正确的方向前进
/// <summary>
/// Calculate Render Width
/// </summary>
/// <param name="str"></param>
/// <param name="fontFamily"></param>
/// <param name="fontSize"></param>
/// <returns></returns>
public static float GetWidthOfString(string str, string fontFamily, int fontSize)
{
var font = new System.Drawing.Font(fontFamily, fontSize, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
var size = TextRenderer.MeasureText(str, font); // GDI
return size.Width;
}
【讨论】: