如何编写我的游戏以处理Android设备的每个分辨率? (使用Unity)

时间:2013-07-25 15:41:28

标签: android unity3d screen-resolution

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

提前致谢!

6 个答案:

答案 0 :(得分:16)

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

如果游戏的大部分内容是使用对象(例如飞机,立方体等)完成的,那么我通常会选择使用两种方法。

1)第一种方法很容易实现,但并不总是看起来太好。您只需更改相机的纵横比即可与您设计的游戏相匹配。所以在你的情况下,既然你在4:3设计了你的游戏,你就会做这样的事情:

Camera.aspect = 4f/3f;

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

2)第二种方法并不容易,需要相当多的工作和计算,但会为您提供更清晰的结果。如果您使用的是正交相机,请记住一件重要的事情是,无论使用何种屏幕分辨率,正交相机都会将高度保持在设定的高度,并且只会改变宽度。例如,使用尺寸为10的正交相机,高度将设置为2.考虑到这一点,您需要做的是补偿每个级别内最宽的相机(例如,具有宽背景)或动态更改相机的正交尺寸,直到其宽度与您创建的相符。

如果您使用立体相机完成3D游戏,屏幕分辨率不应该真正影响其外观,但我猜这取决于游戏,因此需要更多信息

答案 1 :(得分:9)

我的方法是根据设备纵横比更改摄像机视口 考虑你制作了800x1280的游戏

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

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


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

这就像魔法一样

答案 2 :(得分:1)

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

答案 3 :(得分:1)

这是我在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);
}

答案 4 :(得分:0)

我假设它是2D而不是3D,这就是我的do

  1. 创建画布对象
  2. 将“画布缩放器”设置为与屏幕尺寸缩放
  3. 将参考分辨率设置为例如480x320
  4. 设置屏幕匹配模式以匹配或匹配高度
  5. 如果当前屏幕宽度较小,则将匹配项设置为1;如果高度较小,则将匹配项设置为0
  6. 在画布内创建图像作为背景
  7. 添加宽高比拟合脚本
  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;

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

答案 5 :(得分:-1)

对我来说,最好的解决方案是使用相交线的定理,这样既没有侧面的截断,也没有游戏视图的失真。这意味着您必须根据不同的宽高比退回或前进。

如果您愿意,我有an asset on the Unity asset store可以自动校正相机距离,这样无论您使用哪种手持设备,都不会出现失真或切断。