Skip to content

Instantly share code, notes, and snippets.

@morkin1792
Last active April 5, 2023 06:26
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 morkin1792/957f8cf78c5c3ca1567629c611e4aae6 to your computer and use it in GitHub Desktop.
Save morkin1792/957f8cf78c5c3ca1567629c611e4aae6 to your computer and use it in GitHub Desktop.
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Canvas))]
[RequireComponent(typeof(CanvasScaler))]
public class MyCanvasScaler : MonoBehaviour
{
[SerializeField] GameObject canvasContent;
[SerializeField] bool keepProportions = true;
Vector2 referenceResolution;
void OnValidate()
{
if (canvasContent != null)
{
// sets the original CanvasScaler settings
var canvasScaler = GetComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
this.referenceResolution = canvasContent.transform.GetComponent<RectTransform>().sizeDelta;
canvasScaler.referenceResolution = this.referenceResolution;
canvasScaler.screenMatchMode = CanvasScaler.ScreenMatchMode.Expand;
}
}
void Update()
{
if (canvasContent != null && !keepProportions)
{
// if requested scales the canvas content, creating a full-screen distorted version
float currentWidth = GetComponent<RectTransform>().sizeDelta.x;
float currentHeight = GetComponent<RectTransform>().sizeDelta.y;
float scaleX = currentWidth / referenceResolution.x;
float scaleY = currentHeight / referenceResolution.y;
canvasContent.transform.GetComponent<RectTransform>().localScale = new Vector2(scaleX, scaleY);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment