使用屏幕尺寸缩放 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。
我正在尝试缩放 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。