0

I have made a simple 2D game on the latest unity version in free aspect ratio however whenever I change the screen to portrait or landscape things mess up. Now I have spent the whole day following tutorials and going through every tutorial or answer available but strangely not even one of the code helped. Here is how my screen looks on different resolutions

Free Aspect enter image description here Portrait enter image description here Landscape

enter image description here

Right now I'm using this code

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

    public class Screeratio : MonoBehaviour {

        // Use this for initialization
        void Start () {

            // 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)
            {
                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;

            }
        }

        // Update is called once per frame
        void Update () {

        }
    }

and this doesn't seem to work as well. What should I do that my game runs smoothly on any screen size.

2
  • Is it UGUI or not ? If you want have both portrait and landscape in your game maybe it is better to design it for each one. if you use UGUI you can use anchor and set parent for them for controlling them. Commented Sep 19, 2017 at 4:06
  • @ATHellboy Please check my comment below Commented Sep 19, 2017 at 21:16

1 Answer 1

1

Do you use canvas ? Have pay attention to the placment of your anchors ?
If you don't now how use it, you can whatch this video for exemple.

You game can be play only in landscape or in any orientation ?
You can fix the view in portrait or in landscape in Edit>Player>Resolution and Presentation tab.

Sign up to request clarification or add additional context in comments.

2 Comments

I changed the orientation to landscape so portrait view is out of my game now, the only UI element I'm using is Text (and that too doesn't work well even with a canvas attached and with scale with screen size), the rest are all images so I;m not sure whether I should put them inside canvas or not. If I don't put them inside canvas how can I make sure the background will work well on different devices?
You need to place all in a canvas. The background Image and the button the text of the button have to be child of the button object. If your are new with the canvas tool check official unity tuto on canvas

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.