Canvas

  • Unity에서 모든 UI 객체를 렌더링 하기 위한 루트 컴포넌트
  • 기본적으로 4개의 컴포넌트를 포함
    1. RectTransform
    2. Canvas
    3. Canvas Scaler
    4. Graphic Raycaster

RectTransform

  • Anchor가 기준점
  • 다양한 프리셋을 제공해 부모 UI에 어떻게 종속될 것인가를 결정 가능
  • transform 정보를 컨트롤할 때, ahchor가 prefix된 데이터를 이용하는 것을 권장

Graphic Raycaster

  • Overlap 되는 Object(Graphics)가 있을 때, 이를 통과해서 picking 될지 말지를 체크하는 toggle
  • 캔버스 내의 모든 크래픽스를 감시하고 그 중 하나에 충돌했는지 여부를 결정
  • 버튼 UI가 아닌 오브젝트에 클릭 / 터치 이벤트를 적용시킬 때 사용
using UnityEngine.UI;
using UnityEngine.EventSystems;
.....

  Canvas m_canvas;
  GraphicRaycaster m_gr;
  PointerEventData m_ped;
  List<RaycastResult> m_results;
  void Start()
  {
    //m_canvas = 자신이 사용하는 캔버스 넣기.
    m_gr = m_canvas.GetComponent<GraphicRaycaster>();
    m_ped = new PointerEventData(null);
    m_results = new List<RaycastResult>();
  }

  void Update()
  {
    // 현재 포인터의 위치
    m_ped.position = Input.mousePosition;

    // raycast 결과 정보 리스트 초기화
    results.Clear();

    // raycast 결과 정보
    m_gr.Raycast(m_ped, results);

    if(results.Count > 0)
    {
      // 주로 한번의 클릭 / 터치가 발생한다는 점을 감안했을때
      // 인덱스 0의 이벤트에 접근
      if (results[0].gameObject.transform.GetComponent<Something>())
      {
        // ...
      }
    }
  }

DrawMode

Screen Space - Overlay

post_thumbnail

  • 씬 / 카메라 뷰에 상관없이 스크린 사이즈를 기준으로 스케일링
  • 스크린 해상도가 변경되면 UI는 자동으로 리스케일링
  • UI는 다른 DrawMode의 그래픽스보다 후순위에 렌더링(화면 제일 앞에 위치)

Screen Space - Camera

post_thumbnail

  • 카메라 뷰를 기준으로 일정 거리를 유지하면서 렌더링
  • 거리에 따라 스케일링 되는 것이 아니라, 카메라의 Frustum을 기준으로 스케일링
  • 스크린 해상도 혹은 카메라 frustum이 변경되면 리스케일링
  • 월드 오브젝트 / UI 오브젝트 구분없이 순수하게 거리 순으로 렌더링

World Space

post_thumbnail

  • UI를 월드 오브젝트와 동일하게 처리
  • RectTransform으로 여전히 컨트롤할 수 있음

출처

카테고리: ,

업데이트: