- Home /
All GameObjects are squashed on mobile devices
Everything in the editor looks fine, and everything looks normal in windows builds, but when I build to an android or IOS tablet, all the game objects in the scene are squashed. The GUI is not effected, only game objects in the scene. I'm assuming its a camera issue, but I don't know what or why this is. Rotating the mobile device to portrait makes game objects look even more squished, GUI objects still not effected.
Is there a reason for this? and is there a fix?
Answer by Snipe3000 · Nov 07, 2017 at 05:40 PM
Looks like this is a Camera aspect ratio setting issue. I appears Unity defaults it to 16:9. If its not changes for the orientation or the new device it will default to 16:9 and stretch or squash accordingly.
Attach this script to the main canvas in your scene, it will check to see if the rect trans has changed do to orientation changes and reassess the aspect ratio:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AspectRatioChangerScript : MonoBehaviour
{
private GameObject camera;
void Start()
{
camera = GameObject.Find("Main Camera");
}
void OnRectTransformDimensionsChange()
{
StartCoroutine(WaitOneFrame());
}
IEnumerator WaitOneFrame()
{
//returning 0 will make it wait 1 frame
yield return 0;
//Change the aspect ratio
Vector2 aspectRatio = GetAspectRatio(Screen.width, Screen.height);
camera.transform.GetComponent<Camera>().aspect = aspectRatio.x / aspectRatio.y;
}
public static Vector2 GetAspectRatio(int x, int y)
{
float f = (float)x / (float)y;
int i = 0;
while (true)
{
i++;
if (System.Math.Round(f * i, 2) == Mathf.RoundToInt(f * i))
break;
}
return new Vector2((float)System.Math.Round(f * i, 2), i);
}
public static Vector2 GetAspectRatio(int x, int y, bool debug)
{
float f = (float)x / (float)y;
int i = 0;
while (true)
{
i++;
if (System.Math.Round(f * i, 2) == Mathf.RoundToInt(f * i))
break;
}
if (debug)
Debug.Log("Aspect ratio is " + f * i + ":" + i + " (Resolution: " + x + "x" + y + ")");
return new Vector2((float)System.Math.Round(f * i, 2), i);
}
}
Your answer
Follow this Question
Related Questions
Object Placement alignment to background image 2 Answers
shrinking objects 1 Answer
"Press [e] to open" on stationary object when onTrigger 0 Answers
How to detect an object which be in FOV of certain camera ? 1 Answer
Free Look Camera 1 Answer