34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
#nullable enable
|
|
|
|
using UnityEngine;
|
|
|
|
namespace ReplacedPerson.Runtime
|
|
{
|
|
[ExecuteAlways]
|
|
public sealed class ReplacedSafeArea : MonoBehaviour
|
|
{
|
|
private RectTransform? _rectTransform;
|
|
private Rect _lastSafeArea;
|
|
private Vector2Int _lastScreen;
|
|
|
|
private void OnEnable() => Apply();
|
|
private void OnRectTransformDimensionsChange() => Apply();
|
|
|
|
private void Apply()
|
|
{
|
|
if (Screen.width <= 0 || Screen.height <= 0) return;
|
|
var safe = Screen.safeArea;
|
|
var screen = new Vector2Int(Screen.width, Screen.height);
|
|
if (safe == _lastSafeArea && screen == _lastScreen) return;
|
|
if (_rectTransform == null) _rectTransform = GetComponent<RectTransform>();
|
|
if (_rectTransform == null) return;
|
|
_rectTransform.anchorMin = new Vector2(safe.xMin / Screen.width, safe.yMin / Screen.height);
|
|
_rectTransform.anchorMax = new Vector2(safe.xMax / Screen.width, safe.yMax / Screen.height);
|
|
_rectTransform.offsetMin = Vector2.zero;
|
|
_rectTransform.offsetMax = Vector2.zero;
|
|
_lastSafeArea = safe;
|
|
_lastScreen = screen;
|
|
}
|
|
}
|
|
}
|