【Unity】SafeArea対応
セーフエリアは、最近ではiPhoneX対応とか言われているアレです。コンシューマゲームで例えると、重要な情報は画面の内側80%以内におさまる様に描画しなさいっていうアレ。プレイヤーの体力バーとか画面から見切れると大惨事ですし。
セーフエリア対応コード
書こうとしたら見つけてしまった。先人から頂きましょう。GitHubで検索するとたいていのものは見つかりますね。便利なコミュニティが出来たものです。
Unity-SafeAreaCanvas/SetCanvasBounds.cs at master · nkjzm/Unity-SafeAreaCanvas
using UnityEngine;
namespace nkjzm.SafeAreaCanvas
{
[ExecuteInEditMode()]
public class SetCanvasBounds : MonoBehaviour
{
public RectTransform panel;
Rect lastSafeArea = new Rect(0, 0, 0, 0);
void ApplySafeArea(Rect area)
{
panel.anchoredPosition = Vector2.zero;
panel.sizeDelta = Vector2.zero;
var anchorMin = area.position;
var anchorMax = area.position + area.size;
anchorMin.x /= Screen.width;
anchorMin.y /= Screen.height;
anchorMax.x /= Screen.width;
anchorMax.y /= Screen.height;
panel.anchorMin = anchorMin;
panel.anchorMax = anchorMax;
lastSafeArea = area;
}
void Update()
{
if (panel == null) { return; }
Rect safeArea = Screen.safeArea;
#if UNITY_EDITOR
if (Screen.width == 1125 && Screen.height == 2436)
{
safeArea.y = 102;
safeArea.height = 2202;
}
if (Screen.width == 2436 && Screen.height == 1125)
{
safeArea.x = 132;
safeArea.y = 63;
safeArea.height = 1062;
safeArea.width = 2172;
}
#endif
if (safeArea != lastSafeArea)
{
ApplySafeArea(safeArea);
}
}
}
}
対応するCanvasに上記コンポーネントを追加するだけで良い。 Awesome!