C# 按屏幕大小缩放GUI.TextArea

C# 按屏幕大小缩放GUI.TextArea,c#,user-interface,unity3d,textarea,C#,User Interface,Unity3d,Textarea,我正在尝试缩放GUI.TextArea 代码块在OnGui函数中工作。但是当我改变屏幕大小时,文本区域的位置和大小都不正确 是否有类似Canvas.ScaleMode.ScaleToFit的解决方案,或者我应该重新创建GUI.TextArea 编辑:我使用按钮,画布中的一些图像和文本,并使用canvasScaler脚本轻松缩放它们。但是文本对象不包含多行文本,因此我使用gui创建textarea以显示多行文本。unity中的UI系统非常易于使用 1) 单击“添加画布”选择“按屏幕大小缩放”

我正在尝试缩放GUI.TextArea

代码块在OnGui函数中工作。但是当我改变屏幕大小时,文本区域的位置和大小都不正确

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


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

unity中的UI系统非常易于使用

1) 单击“添加画布”选择“按屏幕大小缩放”

重要的!!!!!!!!!!!!! 选择“按屏幕大小缩放”至关重要。 (请注意,这在的“画布缩放器”部分中-它不在的“画布”部分中。)

(2017年——请注意,他们最近将措辞从“空间”改为“大小”。)

Unity无意中在该菜单上设置了错误的默认选项。 在他们解决问题之前,必须记住选择“按屏幕大小缩放”。 其他选项与此无关,几乎从未使用过

2) 单击“添加按钮”,或添加所需的任何元素:面板。滚动视图、滑块等

你完全完了

就这么简单

对于一个给定的项目:为了达到你所说的位置,只需这样做

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

在你的剧本里有

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

确保将物理
.Text
单元(即“画布”下方)拖动到检查器中的该插槽中。在代码中设置文本非常简单:

    hello.text = "some text here"; 
就这么简单。您可以在编辑器中设置类型的大小、形状、位置等,所见即所得

请确保设置以下项目


。。。因为你需要它们。干杯。

unity中的UI系统非常易于使用

1) 单击“添加画布”选择“按屏幕大小缩放”

重要的!!!!!!!!!!!!! 选择“按屏幕大小缩放”至关重要。 (请注意,这在的“画布缩放器”部分中-它不在的“画布”部分中。)

(2017年——请注意,他们最近将措辞从“空间”改为“大小”。)

Unity无意中在该菜单上设置了错误的默认选项。 在他们解决问题之前,必须记住选择“按屏幕大小缩放”。 其他选项与此无关,几乎从未使用过

2) 单击“添加按钮”,或添加所需的任何元素:面板。滚动视图、滑块等

你完全完了

就这么简单

对于一个给定的项目:为了达到你所说的位置,只需这样做

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

在你的剧本里有

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

确保将物理
.Text
单元(即“画布”下方)拖动到检查器中的该插槽中。在代码中设置文本非常简单:

    hello.text = "some text here"; 
就这么简单。您可以在编辑器中设置类型的大小、形状、位置等,所见即所得

请确保设置以下项目


。。。因为你需要它们。干杯。

您应该尝试使用新的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。

您应该尝试使用新的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。

是的,我使用画布缩放按钮和一些图像和文本。但是text.text包含几个字符。如何像图片一样显示长文本?如何使用画布上的文本区域?如果我在画布中添加文本,我无法显示我的所有文本,这非常简单!在脚本中有
公共文本hello
。一定要将文本项拖到它上面。当您想要设置文本时,它是如此简单
hello.text=“此处有文字”是的,我知道这一点,但hello.text不包含多行。我的信息是message=“亲爱的先生,我需要”+任务装量+”千克谷物。如果你接受,我将支付”+任务1向+”弗洛林。但我必须在“+任务期限+”个月内收到供应,否则你将欠我“+罚款+”弗洛林!”;所以我需要textarea。是的,它确实包含多行。它为你做一切。试试看。在编辑器里试试看。只需设置文本的宽度即可。将其设置为“包裹”是的,我正在使用画布缩放按钮和一些图像和文本。但是text.text包含几个字符。如何像图片一样显示长文本?如何使用画布上的文本区域?如果我在画布中添加文本,我无法显示我的所有文本,这非常简单!在脚本中有
公共文本hello
。一定要将文本项拖到它上面。当您想要设置文本时,它是如此简单
hello.text=“此处有文字”是的,我知道这一点,但hello.text不包含多行。我的留言是message=“亲爱的先生,我需要”+任务装量+”千克谷物。如果您接受,我将支付”+任务1向+”弗洛林。但我必须在”+任务装量中收到补给