Skip to content

Instantly share code, notes, and snippets.

@oultrox
Created March 9, 2018 21:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oultrox/babb76d5f2a507dd14870a446e07c575 to your computer and use it in GitHub Desktop.
Save oultrox/babb76d5f2a507dd14870a446e07c575 to your computer and use it in GitHub Desktop.
Ratio Enforcer (Letterbox Scale)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RatioEnforcer : MonoBehaviour {
[SerializeField] private float targetWidth = 256;
[SerializeField] private float targetHeight = 240;
// 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 = targetWidth / targetHeight;
// 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;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment