빌드 세팅
Player Setting > Android > Resolution and Presentation 내부 설정 확인- Render outside safe area의 항목이 체크되어 있는지 확인(기본값은 OFF)
Screen.safeArea
SafeArea API(Unity 2017.2p3 이상)는 실행되고 있는 디바이스의 SafeArea 즉, 안전한 영역의 크기를 Rect 타입으로 반환하며, 이를 이용해 UI의 Rect와 Anchor의 조절이 필요
using UnityEngine;
public class SafeArea : MonoBehaviour
{
RectTransform Panel;
Rect LastSafeArea = new Rect(0, 0, 0, 0);
public Text message;
void Awake()
{
Panel = GetComponent();
Refresh();
}
void Update()
{
Refresh();
}
void Refresh()
{
Rect safeArea = GetSafeArea();
if (safeArea != LastSafeArea)
ApplySafeArea(safeArea);
}
Rect GetSafeArea()
{
return Screen.safeArea;
}
void ApplySafeArea(Rect r)
{
LastSafeArea = r;
Vector2 anchorMin = r.position;
Vector2 anchorMax = r.position + r.size;
anchorMin.x /= Screen.width;
anchorMin.y /= Screen.height;
anchorMax.x /= Screen.width;
anchorMax.y /= Screen.height;
Panel.anchorMin = anchorMin;
Panel.anchorMax = anchorMax;
}
}
출처 : stackoverflow | unity-to-ios-notch-and-safe-are-problems
글 잘 읽었습니다! 질문 하나 드리고 싶은데, update 에서 refresh 를 호출하는데, safearea 와 lastsafearea 가 달라지는 일이 있나요?
답글삭제https://connect.unity.com/p/updating-your-gui-for-the-iphone-x-and-other-notched-devices 에 있는 샘플 코드에요
삭제로테이션 바꾸던가 해상도 코드로 바꾸면 달라져요
Panel = GetComponent(); 에서
답글삭제Returns the component of Type type if the game object has one attached, null if it dosn't 라고 나오네영
아 원문보니 Panel = GetComponent(); 이거군요
삭제사용법을 정확히 모르겠는데 이 스크립트를 캔버스에 넣으면 끝인가요?
답글삭제캔버스에 넣어도 시뮬레이터에선 노치가 그대로 나오긴 해서요