使用屏幕大小缩放GUI.TextArea

时间:2016-03-28 17:40:32

标签: c# user-interface unity3d textarea

我正在尝试扩展GUI.TextArea。

代码块在OnGui函数中工作。但是当我改变屏幕尺寸时,textArea将不会处于正确的位置和大小。

first screen size

second screen size

有没有像Canvas.ScaleMode.ScaleToFit这样的解决方案,还是应该重新创建GUI.TextArea?

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

2 个答案:

答案 0 :(得分:3)

统一的UI系统非常易于使用......

1)点击添加画布.. 选择"按屏幕尺寸缩放"

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

选择"按屏幕尺寸"进行缩放至关重要。

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

enter image description here

(2017年 - 注意他们最近改变了"空间"到"尺寸" ......)的措辞

Unity意外地在该菜单上设置了错误的默认选项。

在解决问题之前,必须记住选择"按屏幕尺寸进行缩放"。

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

2)点击"添加按钮",或添加您想要的任何元素:面板。滚动视图,滑块等

你已经完成了。

这很容易。

对于一个给定的项目:要实现你对POSITION的看法,就这样做......

enter image description here

选择与您相关的选项,可能是中间选项。

在你的剧本中有

  public Text hello

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

务必拖动物理.Text单元(例如,在#34; Canvas"下面)到Inspector中的那个插槽。在代码中设置文本是微不足道的:

    hello.text = "some text here"; 

就这么简单。你可以在编辑器中设置类型的大小,形状,位置等,你看到的就是你得到的。

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

enter image description here

......因为你需要它们。欢呼声。

答案 1 :(得分:-1)

您应该尝试使用新的GUI /画布,但如果您出于某种原因决定使用较旧的立即模式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总是占用相同数量的屏幕。它可以工作,但在更高的分辨率和不同的屏幕宽高比上看起来可能会比你设计的“普通”高得多。 在绘制内容时,您还必须使用“普通”分辨率数字而不是Screen.width和Screen.height。