如何对我的游戏进行编码,使其适用于Android设备的每种分辨率?(与Unity)



我在Unity中制作了一款分辨率为480x320的游戏(我在构建设置中进行了设置)。但我想发布我的游戏为每一个Android设备的每一个决议。我该怎么做,告诉Unity将我的游戏扩展到设备的分辨率?有可能做到吗?

提前感谢!

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

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

1) 第一种方法很容易实现,尽管看起来并不总是很好。你可以简单地改变相机的纵横比,使其与你设计的游戏相匹配。所以在你的情况下,既然你已经在4:3设计了你的游戏,你会做这样的事情:

Camera.aspect = 4f/3f;

然而,如果有人在16:9的屏幕上玩游戏,游戏最终会看起来扭曲和拉伸。

2) 第二种方法并不容易,需要大量的工作和计算,但会给你一个看起来更干净的结果。如果使用正交摄影机,需要记住的一件重要事情是,无论使用何种屏幕分辨率,正交摄影机都会将高度保持在设定的高度,并且只更改宽度。例如,如果正交摄影机的大小为10,则高度将设置为2。考虑到这一点,您需要做的是补偿每个级别中尽可能宽的摄影机(例如,具有宽背景),或者动态更改摄影机的"正交大小",直到其宽度与您创建的宽度相匹配。

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

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

你可以在的任何一个脚本中做到这一点

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

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

这就像魔术一样

一个简单的方法是考虑你的目标,我的意思是,如果你在为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;
} 

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

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);
}

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

  1. 创建Canvas对象
  2. 将画布缩放器设置为随屏幕大小缩放
  3. 将"参考分辨率"设置为,例如:480x320
  4. 将屏幕匹配模式设置为匹配宽度或高度
  5. 如果当前屏幕宽度较小,则将匹配项设置为1(如果高度较小,则设置为0)
  6. 在画布内创建图像作为背景
  7. 添加纵横比Fitter脚本
  8. 将"纵横比模式"设置为"适合父对象"(这样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;
//Make sure to add Using Unity.UI on top of your Aspect Ratio Script!

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

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

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

最新更新