Last active
August 9, 2024 07:11
-
-
Save SeanMcTex/c28f6e56b803cdda8ed7acb1b0db6f82 to your computer and use it in GitHub Desktop.
Restrict Unity UI to an iPhone X or other Mobile Device's Safe Area
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
/// <summary> | |
/// Resizes a UI element with a RectTransform to respect the safe areas of the current device. | |
/// This is particularly useful on an iPhone X, where we have to avoid the notch and the screen | |
/// corners. | |
/// | |
/// The easiest way to use it is to create a root Canvas object, attach this script to a game object called "SafeAreaContainer" | |
/// that is the child of the root canvas, and then layout the UI elements within the SafeAreaContainer, which | |
/// will adjust size appropriately for the current device./// </summary> | |
public class PinToSafeArea : MonoBehaviour { | |
private Rect lastSafeArea; | |
private RectTransform parentRectTransform; | |
private void Start() { | |
parentRectTransform = this.GetComponentInParent<RectTransform>(); | |
} | |
private void Update() { | |
if ( lastSafeArea != Screen.safeArea ) { | |
ApplySafeArea(); | |
} | |
} | |
private void ApplySafeArea() { | |
Rect safeAreaRect = Screen.safeArea; | |
float scaleRatio = parentRectTransform.rect.width / Screen.width; | |
var left = safeAreaRect.xMin * scaleRatio; | |
var right = -( Screen.width - safeAreaRect.xMax ) * scaleRatio; | |
var top = -safeAreaRect.yMin * scaleRatio; | |
var bottom = ( Screen.height - safeAreaRect.yMax ) * scaleRatio; | |
RectTransform rectTransform = GetComponent<RectTransform>(); | |
rectTransform.offsetMin = new Vector2( left, bottom ); | |
rectTransform.offsetMax = new Vector2( right, top ); | |
lastSafeArea = Screen.safeArea; | |
} | |
} |
Thank you! Simple and just works
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Haha! Glad it continues to be useful. :)