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

29

新的Unity 4.6版本带有全新的GUI界面,当我在Unity中更改分辨率时,UI按钮会完美缩放,但是当我在Nexus 7设备上测试时,按钮看起来太小了。有什么办法解决这个问题吗?

Unity 4.6

Android - Nexus 7 2Gen


我还没有使用过新的Unity GUI,但在NGUI中,该选项位于GUI的根对象上。因此,也许该选项在画布上。另一件你可以尝试的事情是将游戏屏幕的分辨率设置为你想要使用的分辨率。这可能会更好地展示UI,以便它看起来更像你的目标设备上的样子。 - Tom
5个回答

23
Unity的新GUI系统使用"anchors"来控制GUI元素(如按钮)与其父容器之间的比例缩放。
Unity在这里有一个教程视频,介绍如何使用新的"Rect Transform"组件(其中配置锚点):http://unity3d.com/learn/tutorials/modules/beginner/ui/rect-transform
教程的后半部分涵盖了关于锚点的内容。该页面有指向整个教程系列的链接。它不是很长。你应该观看整个教程。
针对您的问题:
锚点在您的第一个截屏中可见。它们是您按钮左上角的4个小箭头。
现在,您的按钮只由其左上角固定。
右侧的两个锚点需要向右拖动,使您的按钮的右边缘被固定在其父容器内的空间中。
根据您的情况,两个底部箭头可能需要向下拖动,以使您的按钮的底部边缘也被锚定。
我上面链接的视频详细讲解了所有这些内容。
最后,为了使字体大小在不同分辨率下得到良好的缩放,您需要向UI的基本画布添加和配置参考分辨率组件,就像Ash-Bash32之前所写的那样。
更新:添加参考分辨率组件的最佳方法是通过UI中基本画布的检查器窗口。
1) 在检查器底部单击"Add Component Button"。
2) 在搜索过滤器字段中输入单词"Reference"。
3) 从搜索结果中选择"Reference Resolution"组件。 steps to add a reference resolution component in Unity

谢谢@schmosef!! 这解决了我的问题,我正在观看所有新GUI的视频。你能给我一个关于"Ash-Bash 32"的链接吗?它看起来很有趣。 - benLIVE
@benLIVE在这里,一个链接到Ash-Bash32;或者只需向下滚动;-) - Stefan Hoffmann
哈哈,我以为你在谈论一个库或者其他什么东西,抱歉!! - benLIVE
9
从4.6 BETA 21版开始,参考解析组件已被Canvas Scaler组件所代替。 - F3CP

21

参考解析现在更名为画布缩放器(Canvas Scaler). 除了更名外,它们还增加了许多功能以提高画布的动态性。 您可以查看Canvas Scaler的Unity文档,并参考这篇文章来了解如何使用Canvas Scaler以及为什么要使用它。另外,请确保有效地使用锚点以使其更加健壮。


10

为了缩放UI,您需要向要缩放的Canvas添加ReferenceResolution组件。 enter image description here

注:关于ReferenceResolution没有文档。


2
如果您想让按钮在所有屏幕和分辨率下保持相同的大小,则必须向画布添加画布缩放器组件,并将屏幕匹配模式设置为:匹配宽度或高度。这是文档链接,如果您想针对不同的尺寸或分辨率进行调整,则非常有帮助:

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


1

一旦你开始用代码布局和使用画布缩放器,这就变得庞大而复杂了,因此我希望提供一个详细的答案,以节省其他人所花费的时间。

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

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

第三,如果您有一个缩放器,请勿使用Screen.width和height,而是假设屏幕与您为缩放器设置的相同值(希望您使用了相同的值,或者知道自己在做什么)。屏幕宽度始终返回实际设备像素,包括Retina设备,但画布缩放器不考虑此因素。这可能是Unity找到实际屏幕dpi的最后一种方法,如果您的游戏需要它。编辑:本段适用于连接到执行布局的代码的任何父画布。不要使用杂散的画布,您可能会混淆。只需记住Unity关于画布性能的准则即可。
第四,画布仍然有一些小问题。即使上述工作正常,有些东西在重新打开场景或崩溃之前不会呈现,除非您删除并重新创建画布。否则,以上是我发现的一般“规则”。
要使“网格中的物品”居中,您不能仅使用画布缩放器宽度或高度的一半,您必须计算网格的高度并将偏移量设置为其一半,否则它将始终略微偏离。我只是添加了这个额外的提示。此计算适用于所有方向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接