11

我有一个我在 Unity 中以 480x320 分辨率制作的游戏(我在构建设置中设置了它)。但我想为每台具有各种分辨率的 Android 设备发布我的游戏。我该怎么做才能告诉 Unity 将我的游戏扩展到设备的分辨率?有可能吗?

提前致谢!

4

6 回答 6

16

您的问题的答案很大程度上取决于您如何实现游戏。如果您使用 GUI 纹理创建它,那么它在很大程度上取决于您放置/调整对象的方式与屏幕大小的关系,这使事情变得有些棘手。

如果您的大部分游戏都是使用对象(例如平面、立方体等)完成的,那么我通常会选择使用两种方法。

1)第一种方法很容易实现,虽然并不总是看起来太好。您可以简单地更改相机的纵横比以匹配您设计游戏的那个。因此,在您的情况下,由于您以 4:3 设计游戏,因此您将执行以下操作:

Camera.aspect = 4f/3f;

但是,如果有人在 16:9 的屏幕上玩游戏,游戏最终会显得扭曲和拉伸。

2) 第二种方法不太容易,需要大量的工作和计算,但会给你一个更清晰的结果。如果您使用的是正交相机,要记住的重要一点是,无论使用什么屏幕分辨率,正交相机都会将高度保持在设定的高度,并且只会改变宽度。例如,对于大小为 10 的正交相机,高度将设置为 2。考虑到这一点,您需要做的是补偿每个级别中可能的最宽相机(例如,具有较宽的背景) 或动态更改相机的正交尺寸,直到其宽度与您创建的相匹配。

如果你用立体相机做过 3d 游戏,屏幕分辨率应该不会真正影响它的外观,但我想这取决于游戏,所以需要更多信息

于 2013-07-26T11:56:40.023 回答
9

我所做的方法是根据设备纵横比更改相机视口考虑您为 800x1280 制作的游戏

您可以在任何一个脚本中执行此操作

float xFactor = Screen.width / 800f;
float yFactor = Screen.height  / 1280f;


Camera.main.rect=new Rect(0,0,1,xFactor/yFactor);

这就像魔术一样

于 2014-06-22T19:36:03.987 回答
2

一个简单的方法是考虑你的目标,我的意思是如果你正在为 Iphone 5 做游戏,那么纵横比是 9:16 v 或 16:9 h。

   public float targetRatio = 9f/16f; //The aspect ratio you did for the game.
void Start()
{
   Camera cam = GetComponent<Camera>();
   cam.aspect = targetRatio;
} 
于 2015-01-19T23:44:06.290 回答
2

这是我在 2D 游戏中缩放正交相机的脚本

public float screenHeight = 1920f;
public float screenWidth = 1080f;
public float targetAspect = 9f / 16f;
public float orthographicSize;
private Camera mainCamera;

// Use this for initialization
void Start () {

    // Initialize variables
    mainCamera = Camera.main;
    orthographicSize = mainCamera.orthographicSize;

    // Calculating ortographic width
    float orthoWidth = orthographicSize / screenHeight * screenWidth;
    // Setting aspect ration
    orthoWidth = orthoWidth / (targetAspect / mainCamera.aspect);
    // Setting Size
    Camera.main.orthographicSize = (orthoWidth / Screen.width * Screen.height);
}
于 2016-05-03T11:04:01.493 回答
0

我假设它是 2D 而不是 3D,这就是我所做的:

  1. 创建画布对象
  2. 将 Canvas Scaler 设置为随屏幕大小缩放
  3. 将参考分辨率设置为例如:480x320
  4. 将屏幕匹配模式设置为匹配或高度
  5. 如果您当前的屏幕宽度较小,则将匹配设置为 1,如果高度较小,则设置为 0
  6. 在画布内创建一个图像作为背景
  7. 添加纵横比拟合器脚本
  8. 将 Aspect Mode 设置为 Fit in Parent(因此 UI 锚点可以在任何位置)
  9. 将纵横比设置为 480/320 = 1.5

并在主 Canvas 的 Awake 方法中添加此代码段:

var canvasScaler = GetComponent<CanvasScaler>();
var ratio = Screen.height / (float) Screen.width;
var rr = canvasScaler.referenceResolution;
canvasScaler.matchWidthOrHeight = (ratio < rr.x / rr.y) ? 1 : 0;

对于 3D 对象,您可以使用上述任何答案

于 2019-04-04T09:43:39.740 回答
-1

对我来说最好的解决方案是使用相交线定理,这样既不会在侧面出现截断,也不会扭曲游戏视图。这意味着您必须根据不同的纵横比后退或前进。

如果您愿意,我在 Unity 资产商店中有一个资产,它会自动校正相机距离,因此无论您使用哪种手持设备,您都不会出现失真或截断。

于 2015-02-19T00:33:56.370 回答