2019년 7월 12일 금요일

Unity Notch(노치) 단말기 UI 설정

상단의 프레임 아래쪽으로 툭 튀어나와 있는 H/W 영역인 Notch의 처리를 위해 체크해야 하는 항목을 정리해 둔다.

빌드 세팅

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

댓글 5개:

  1. 글 잘 읽었습니다! 질문 하나 드리고 싶은데, update 에서 refresh 를 호출하는데, safearea 와 lastsafearea 가 달라지는 일이 있나요?

    답글삭제
    답글
    1. https://connect.unity.com/p/updating-your-gui-for-the-iphone-x-and-other-notched-devices 에 있는 샘플 코드에요

      로테이션 바꾸던가 해상도 코드로 바꾸면 달라져요

      삭제
  2. Panel = GetComponent(); 에서

    Returns the component of Type type if the game object has one attached, null if it dosn't 라고 나오네영

    답글삭제
    답글
    1. 아 원문보니 Panel = GetComponent(); 이거군요

      삭제
  3. 사용법을 정확히 모르겠는데 이 스크립트를 캔버스에 넣으면 끝인가요?

    캔버스에 넣어도 시뮬레이터에선 노치가 그대로 나오긴 해서요

    답글삭제

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...