使用屏幕尺寸缩放 GUI.TextArea

Scaling GUI.TextArea with Screen Size

我正在尝试缩放 GUI.TextArea。

代码块在 OnGui 函数中有效。但是当我改变屏幕尺寸时,textArea 不会在正确的位置和尺寸上。

first screen size

second screen size

是否有类似 Canvas.ScaleMode.ScaleToFit 的解决方案,或者我应该重新创建 GUI.TextArea?

编辑:我在 canvas 中使用按钮、一些图像和文本,并使用 canvasScaler 脚本轻松缩放它们。但是文本对象不包含多行文本,所以我用 gui 创建了 textarea 来显示多行文本。

unity中的UI系统非常好用...

1) 点击添加 canvas .. select "scale with screen size"

重要!!!!!!!!!!!!!!

关键select "scale with screen size".

(请注意,这是在 "Canvas Scaler" 部分中 - 它不在 "Canvas" 部分中.)

(2017 - 请注意,他们最近将措辞从 "space" 更改为 "size"...)

Unity 不小心在该菜单上设置了错误的默认选项。

在他们解决问题之前,请务必记住 select "scale with screen size"。

其他选项无关紧要,几乎从未使用过。

2) 单击"Add Button",或添加您想要的任何元素:面板。滚动视图、滑块等

大功告成。

就这么简单。

对于给定的项目:要实现您所说的 POSITION,只需这样做...

select与你相关的选项,可能是中间那个。

在你的脚本中有

  public Text hello

这将在您的检查器面板中为该脚本创建一个插槽(标记为 "hello")。

一定要拖动 物理 .Text 单元(即 "Canvas" 下面)到检查器中的那个插槽。在代码中设置文本很简单:

    hello.text = "some text here"; 

就这么简单。您可以在编辑器中设置文字的大小、形状、位置等,所见即所得。

请务必设置以下项目...

...如您所愿。干杯。

您应该尝试使用新的 GUI / Canvases,但如果您出于某种原因决定使用旧的即时模式 GUI,您可以这样做:

public static Vector3 GUIScale{
    get{
        float normalWidth = 1024; //Whatever design resolution you want
        float normalHeight = 768;
        return new Vector3(Screen.width / normalWidth, Screen.height / normalHeight, 1);
    }
}


public static Matrix4x4 AdjustedMatrix{
    get {
        return Matrix4x4.TRS(Vector3.zero, Quaternion.identity, GUIScale);
    }
}

void OnGUI(){
    GUI.matrix = AdjustedMatrix;
    (... GUI drawing code ...)
}

这将使 GUI 始终占据相同数量的屏幕。它会工作,但在比您设计的 "normal" 更高的分辨率和不同的屏幕纵横比下它可能看起来很糟糕。 在绘图时,您还必须使用 "normal" 分辨率数字而不是 Screen.width 和 Screen.height。