Why do camera's aspect ratio look good on computer but not on Android devices?

Posted by Pooya Fayyaz on Game Development See other posts from Game Development or by Pooya Fayyaz
Published on 2014-08-23T10:17:10Z Indexed on 2014/08/23 16:34 UTC
Read the original article Hit count: 290

Filed under:
|
|
|

I'm developing a game for Android devices and I have a script that solves the aspect-ratio problem for computer screens but not for my intended target platform. It looks perfect on computer, even when re-sizing the game screen, but not when running my game in landscape mode on mobile phones.

This is my script

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class reso : MonoBehaviour
{
    void Update()
    {
        // set the desired aspect ratio (the values in this example are
        // hard-coded for 16:9, but you could make them into public
        // variables instead so you can set them at design time)
        float targetaspect = 16.0f / 9.0f;

        // determine the game window's current aspect ratio
        float windowaspect = (float)Screen.width / (float)Screen.height;

        // current viewport height should be scaled by this amount
        float scaleheight = windowaspect / targetaspect;

        // obtain camera component so we can modify its viewport
        Camera camera = GetComponent<Camera>();

        // if scaled height is less than current height, add letterbox
        if (scaleheight < 1.0f && Screen.width <= 490 )
        {
            Rect rect = camera.rect;
            rect.width = 1.0f;
            rect.height = scaleheight;
            rect.x = 0;
            rect.y = (1.0f - scaleheight) / 2.0f;

            camera.rect = rect;
        }
        else // add pillarbox
        {
            float scalewidth = 1.0f / scaleheight;

            Rect rect = camera.rect;

            rect.width = scalewidth;
            rect.height = 1.0f;
            rect.x = (1.0f - scalewidth) / 2.0f;
            rect.y = 0;

            camera.rect = rect;
        }
    }
}

I figured that my problem occurs in this part of the script:

if (scaleheight < 1.0f)
        {
            Rect rect = camera.rect;
            rect.width = 1.0f;
            rect.height = scaleheight;
            rect.x = 0;
            rect.y = (1.0f - scaleheight) / 2.0f;

            camera.rect = rect;
        }

Its look like this on my mobile phone (portrait):

enter image description here

and on landscape mode: enter image description here

© Game Development or respective owner

Related posts about unity

Related posts about camera