Files
2026-08-17 18:18:13 +08:00

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;
}
}
}