适用于所有Android移动设备的所有纵横比的Unity Scaling

时间:2018-11-20 10:14:53

标签: c# android unity3d scaling

我是Unity新手,并且遇到了这个“问题”。

我正在尝试制作一个始终以人像模式运行的简单2D手机游戏(目前为Android),但是在所有不同的屏幕尺寸下我都无法获得相同的结果。

问题是,当我尝试在所有不同的屏幕尺寸上均等地缩放屏幕时,但是我得到的是上下左右的背景截止(我知道这与{{ 1}}),当我尝试更改屏幕尺寸时。

所以我在Canvas Scaler中使用的是:Match Width Or Height,参考分辨率为Scale With Screen Size,背景图像尺寸为1080x1920。

当我尝试调整为更大的屏幕分辨率(例如1080 x 2160)时:

  • 使用X:1080 Y:1920截断背景

  • 使用Shrink会出现“黑条”。

  • ExpandMatch Width Or Height一起使用,会出现“黑条”或Match: 1,背景在两侧均被截断。

或者在调整为较小的比例(3:4)时,也会在两侧出现黑条或背景截止。

所有16:9(576x1024、720x1280、1080x1920、1440x2560等)似乎都是正确的。

所以我的问题是,我能以哪种方式支持所有不同的移动屏幕尺寸,包括所有不同的宽高比,而又不会背景截止或侧面出现黑条?

谢谢。

2 个答案:

答案 0 :(得分:1)

由于使用aspect ratio fitter,图像试图保持其宽高比,导致图像出现黑条/切掉。

它在576x1024、720x1280、1440x2560等上可以正常工作,因为宽高比与原始图像(或画布,即1080x1920)相同,长宽比为9:16。

如果您不希望出现黑条或图像的一部分被切断,则需要将图像拉伸/裁剪为新的宽高比(例如,如果要1080x2160,则为1:2的宽高比)< / p>

要执行此操作,您需要删除宽高比调整器,并确保在图像组件上选中preserve aspect。然后使图像始终充满画布/屏幕尺寸。例如,将GameObject background作为画布的子元素,将image组件添加到background并将变换的widthheight设置为与Screen.currentResolution(来自Screen类)

但是,这会将图像拉伸到不适合宽高比的方向(如果原始图像为9:16(1080x1920),并且您希望它显示2:1(2160x1920),它将拉伸为尺寸是x轴尺寸的两倍,因此会产生扭曲的图片,并且大部分都是难看的图片)。为了解决这个问题,您可能需要为非标准的宽高比制作单独的图像,或者使图像在拉伸时看起来不会变差。

答案 1 :(得分:1)

问题是您的画布缩放器确实可以缩放到屏幕大小,但是背景却不能。背景图片的尺寸固定为1080x1920。

我认为进行这种缩放(拉伸)的最简单方法是将图像设置为填充父对象(画布对象)。

要实现此目的,可以将背景图像的锚点设置为这些值。像这样Post

Anchors

    Min  X 0 Y 0

    Max  X 1 Y 1

或者仅使用锚点预设来设置这些值。

您可以从here获取有关锚点的更多信息。

但是就像@remy_rm所说的那样,这种方法会拉伸您的背景图片。