Unity 4.6 - 如何将 GUI 元素缩放到适合每个分辨率的大小

Posted

技术标签:

【中文标题】Unity 4.6 - 如何将 GUI 元素缩放到适合每个分辨率的大小【英文标题】:Unity 4.6 - How to scale GUI elements to the right size for every resolution 【发布时间】:2014-08-25 00:12:03 【问题描述】:

新的 Unity 4.6 带有一个新的 GUI,当我在 Unity 上更改分辨率时,UI 按钮可以完美缩放,但是当我在 Nexus 7 设备上测试时,按钮看起来太小了。知道如何解决这个问题吗?

【问题讨论】:

我没有使用新的统一 gui,但在 ngui 中,该选项位于 gui 的根对象上。所以也许选项在画布上。您可以尝试的另一件事是将游戏屏幕的分辨率设置为您想要使用的分辨率。这可能会以更接近目标设备的方式显示 ui。 【参考方案1】:

Unity 的新 GUI 系统使用“锚点”来控制 gui 元素(如按钮)相对于其父容器的缩放方式。

Unity 有一个关于如何使用新的“矩形变换”组件(其中配置了锚点)的教程视频:http://unity3d.com/learn/tutorials/modules/beginner/ui/rect-transform。

教程的后半部分都是关于锚点的。该页面包含指向整个教程系列的链接。时间不会太长。你应该看整个事情。

具体到您的问题:

锚点在您的第一个屏幕截图中可见。它们是按钮左上方的 4 个小箭头。

现在,您的按钮仅固定在左上角。

需要将两个右锚点拖到右侧,以便按钮的右边缘锚定到其父容器内的空间。

根据您的情况,可能需要向下拖动两个底部箭头,以便您的按钮的底部边缘也被锚定。

我上面链接的视频详细介绍了所有这些。

最后,如 Ash-Bash32 之前所写,为了使字体大小在不同分辨率下很好地缩放,您需要向 UI 的基本画布添加和配置参考分辨率组件。

更新:添加参考分辨率组件的最佳方法是通过 UI 中基本画布的检查器窗口。

1) 点击检查器底部的“添加组件按钮”。

2) 在搜索过滤器字段中输入“参考”一词。

3) 在搜索结果中选择“参考分辨率”组件。

【讨论】:

谢谢@schmosef !!这解决了我的问题,我正在观看新 GUI 的所有视频。你能给我一个关于“Ash-Bash 32”的链接吗?看起来很有趣 @benLIVE 在这里,link to Ash-Bash32;或者只是向下滚动;-) jaja,我以为是在说图书馆什么的,抱歉!! 自 4.6 BETA 21 起,参考解析组件已替换为 Canvas Scaler Component【参考方案2】:

Reference Resolution 现在被重命名为 Canvas Scaler。随着重命名,他们为 Canvas 的动态性添加了更多功能。您可以浏览Unity Doc of Canvas Scaler 并查看this article,以获取有关如何以及为何使用 Canvas Scaler 的实际示例。还要确保您使用锚点效果良好,以使其更加健壮...

【讨论】:

【参考方案3】:

要缩放 UI,将 ReferenceResolution 组件添加到要缩放的画布中。

附: ReferenceResolution没有文档

【讨论】:

【参考方案4】:

如果您希望按钮在所有屏幕和分辨率下都具有相同的大小,则必须将画布缩放器组件添加到画布并将屏幕匹配模式设置为:匹配宽度或高度,这里是指向docs,如果您想针对不同的尺寸或分辨率,这会很有帮助:

http://docs.unity3d.com/Manual/HOWTO-UIMultiResolution.html

【讨论】:

【参考方案5】:

一旦您开始在代码中布局并使用画布缩放器,这将变得巨大而复杂,因此我希望提供一个彻底的答案,以节省我所经历的时间。

首先,不要使用 anchoredPosition 来定位任何东西,除非你完全意识到它是一个 0.0 到 1.0 的数字。使用 RectTransform localPosition 进行实际布局,并记住它与父锚点有关。 (我必须从中心布置一个网格)

其次,在父布局对象和内部 ui 块上放置一个画布缩放器。一个使布局处于正确的位置,另一个将调整您的元素大小,以便它们实际显示正确。你不能依赖父母,除非孩子也有缩放器(和图形光线投射器来触摸它们)。

第三,如果您有缩放器,请不要使用 Screen.width 和高度,而是假设屏幕与您为缩放器设置的值相同(希望您使用相同的值,或者知道您在做什么)。屏幕宽度总是返回实际的设备像素,视网膜设备也一样,但画布缩放器不考虑这一点。如果您的游戏需要,这可能为统一提供了另一种查找实际屏幕 dpi 的方法。编辑:本段适用于连接到进行布局的代码的任何父画布。不是流浪的画布,你可以把它混在一起。请记住 unity 关于画布性能的指南。

第四,画布还是有点问题。即使上述工作正常,某些内容在您删除并重新创建画布之前不会渲染,如果您重新打开场景或它崩溃。否则,以上就是我找到的一般“规则”。

要使“事物网格”居中,您不能只使用画布缩放器宽度或高度的一半,您必须计算网格的高度并将偏移量设置为它的一半,否则它总是会稍微离开。我只是添加了这个作为额外的提示。此计算适用于所有方向。

【讨论】:

以上是关于Unity 4.6 - 如何将 GUI 元素缩放到适合每个分辨率的大小的主要内容,如果未能解决你的问题,请参考以下文章

Unity 4.6 的 GUI - 检测 Click() Down

FairyGUI和NGUI对比

Flex 4.6 缩放事件

为啥我的这个面板的选项不一样,我想创建GUI texture,但是我这个unity里面没有这个选

UI 元素无法正确缩放

Unity UI 缩放和实例化预制件