将Unity游戏移植到Android时的解决问题


9

因此,我第一次在Unity3D中将游戏移植到Android。在此过程中,我遇到了一些问题。我当前的问题是分辨率似乎不正确,它切断了屏幕的边缘,并且我向左/向右滚动屏幕的滚动停止位置不再正确。

经过大量研究后,许多人说您需要使游戏的分辨率独立,才能在所有Android / Iphone / Ipad上运行。这是真的?如果是这样,我该怎么做?如果没有,如何帮助您解决分辨率问题,以便在移植到移动设备时看起来正确?

编辑:我仍然没有真正需要的东西,即使使用下面列出的代码和技巧,分辨率仍然无法正常工作。我需要一些方法来根据设备调整分辨率。由于某些原因,当我尝试使用Mungoid的代码检索设备的分辨率时,它将返回0x0


1
您需要遍历假定屏幕分辨率的任何代码,然后对其进行更改,以便可以采用当前屏幕分辨率并对其进行处理。根据您的工作方式以及工作方式,没有一种适合所有人的解决方案。
Tetrad

至于具体细节,这个问题进入一些细节(有很多关于此网站上的问题)gamedev.stackexchange.com/questions/51/...
四联

嗯,基本上就是Namar所说的:“请确保您按比例放置所有内容。例如,将健康栏放置在屏幕宽度的80%处,并将其水平放置在屏幕宽度的10%处”,那么我该如何解决引用问题太空中的特定区域?我的屏幕滚动是基于世界空间中的特定区域进行的,但这似乎与分辨率的变化搞混了。
蒂莫西·威廉姆斯

您能否更具体地说明您的问题?您说的分辨率“似乎不正确”,并且“仍处于关闭状态”-但是屏幕分辨率通常是设备的固定属性。因此,错误的不是分辨率,而是渲染到屏幕的方式。如果您对屏幕的宽度和高度做出假设,则始终会在不同的设备和纵横比上遇到麻烦。
Kylotan'5

我想我实际上要写的是找到最低分辨率的代码,将游戏设置为最低分辨率,并相应地缩放所有对象。我知道如何设置运动场的比例,但似乎无法获得设备的分辨率。因此游戏“放大”了,或者一切都太大了。
蒂莫西·威廉姆斯

Answers:


7

Android会遇到的一个问题是,每个不同的设备都有自己的屏幕尺寸,分辨率和像素密度。如果您希望自己的游戏在所有设备上看起来都一样,则您需要进行大量工作,并且可能永远不会对结果感到满意。游戏将在宽屏显示器上显示为拉伸状态,或者在非宽屏显示器上显示为压缩状态。我建议您决定什么才是真正重要的,然后让其他任何内容滑动一下。

在没有任何屏幕截图或游戏状态和外观的知识的情况下,我们都可以推测解决方案,但我们没有向您提供具体建议的具体方向。

在Unity中,您可以使用Screen类:Screen.widthScreen.height(以及其他属性)访问当前屏幕的尺寸。然后,您可以根据屏幕尺寸和您对可见内容的个人期望,更改Camera的纵横比,以更改在不同尺寸的屏幕上可见的内容。

如果您需要确保正确缩放所有HUD显示,可以通过在每个功能中基于屏幕尺寸更改GUI转换矩阵来实现OnGUI()。我之前已经做过这个简单的脚本,并将其附加到可以缩放我想要缩放的GUI元素的任何东西上:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

然后,在实际OnGUI()函数中,我立即设置了转换矩阵:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}

根据屏幕的宽度和高度设置相机的宽高比无济于事,当手机处于垂直状态时,它根本不会显示;当手机处于水平状态时,它会显示与以前完全相同的内容。这场比赛是在三个区域分手了,你平稳地部分之间滚动用手指(像愤怒的小鸟),这里是什么样的左边应该看起来像一个图片。和中间。这是我的手机垂直放置时的左侧,
蒂莫西·威廉姆斯

这是水平的。希望这些图片能对您有所帮助,这是我第一次从Unity移植到Android,甚至制作Android游戏。我有点迷路了。
蒂莫西·威廉姆斯

从(我对您的解释和图片的解释)来看,问题不是解决方案;而是解决方案。您的相机不在可能会在小屏幕上显示所需内容的位置。缩小级别或将相机移回以显示更多内容。我建议你的游戏窗口设置为多少更小的尺寸来表示大小的实际设备而不是1230x530ish大小你现在这样你就可以得到,当你推过来,你会看到什么感觉。
chaosTechnician 2012年

问题是我已经相当大地缩小了相机。如果这个问题将持续存在,我该如何准确考虑各种屏幕和尺寸并对此进行修改?
蒂莫西·威廉姆斯

@TimothyWilliams,您可以通过选择与游戏兼容的最低分辨率(800x600或其他分辨率)来解决问题。然后,Screen.width与和.height一起使用Camera.fieldOfView和,Camera.aspect以在任意屏幕尺寸上重现相同的视图。它只是需要一些三角函数制定出具体是如何做到这一点。
chaosTechnician 2012年

0

您可以尝试以下类似方法并将其应用。我猜想移动设备应该只返回一种分辨率。

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

也可以在此处查看有关统一屏幕的更多信息,网址为http://unity3d.com/support/documentation/ScriptReference/Screen.html


这没有帮助我,分辨率仍然关闭。
蒂莫西·威廉姆斯

由于某种原因,它在我的Android上返回“ 0x0” ...
蒂莫西·威廉姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.