# Canvas Render Mode

Screen Space - Overlay가 기본이고
Canvas 자체가 또 다른 가상의 공간에서 카메라로 촬영하는 것이다
Screen Space - Camera로 설정하면
Render Camera를 지정해 3D 오브젝트처럼 z값을 이용할 수 있다
# UI와 함수 바인드 방법
Button 오브젝트에 Button 컴포넌트의 On Click() 부분에서
원하는 함수 바인딩 가능하다

# UI와 함수 바인드 실제 예시
참고로 Canvas 하나 자체를 UI의 관점으로 볼 수 있기에
Canvas의 이름을 UI_Button으로 변경하고
Prefab화해서 활용한다
다시 돌아와서,
UI_Button(Canvas)에 스크립트 컴포넌트 추가해서
바인드 할 함수를 public으로 스크립트에 작성해줘야 한다
그러면 해당 오브젝트(UI_Button)와 작성한 함수를
툴에서 Button 컴포넌트의 On Click 부분에 설정 가능
# EventSystem을 이용한 UI 선택 여부 판단
기존 InputManager에서 UI를 선택하는 경우에는
이동을 하지 않도록 구현하기 위해서
EventSystem.current.IsPointerOverGameObject()를 통해 걸러내면 된다
public class InputManager
{
public event Action KeyAction = null;
public event Action<Define.MouseEvent> MouseAction = null;
bool _mousePressed = false;
public void OnUpdate()
{
if (EventSystem.current.IsPointerOverGameObject()) // 걸러내기
return;
...
}
}
# UI끼리 연동 방법
다양한 방법이 있지만 가장 단순한 방법은
UI_Button 스크립트에서 필요로 하는 UI를 SerializedField 변수로 저장하고
툴에서 원하는 오브젝트를 드래그드랍하는 방식이다
public class UI_Button : MonoBehaviour
{
[SerializeField]
Text _text;
}

# Canvas의 Prefab화
앞서 나온 내용이지만 다시 정리하면
원하는 형태의 UI를 만들고 Canvas의 이름을 변경하여
Prefab화해서 재사용하면 된다
# UI 런타임 생성해 보기
PlayerController의 Start에서 진행하면 쉽게 런타임에 생성 가능하다
public class PlayerController : MonoBehaviour
{
...
void Start()
{
...
Managers.Resource.Instantiate("UI/UI_Button");
}
# Canvas의 Sort Order
여러 개의 UI(Canvas)가 각각 다른 경우에
Canvas의 Sort Order에 따라서 먼저 뜨는 순서가 정해진다
즉, 팝업의 중첩(재귀)과 관련된 것이 Sort Order이다
# 위에서 해온 UI Event 방식의 문제점
OnClick()을 등록할 때,
드래그드롭으로 객체를 지정해줘야 한다
UI끼리 연동할 때,
SerializedField로 변수를 저장하고 드래그드롭으로
객체를 지정해줘야 한다
이러한 방식은 매우 비효율적이고 유지 보수가 힘들어진다
그래서 UI매니저를 생성해 이를 관리하는 것이 좋다
'게임 엔진 - 유니티 > [루키스] 유니티' 카테고리의 다른 글
| [유니티 Note] 섹션 8-1 (0) | 2025.07.07 |
|---|---|
| [유니티 Note] 섹션 7-3 (0) | 2025.07.05 |
| [유니티 Note] 섹션 7-2 (0) | 2025.07.05 |
| [유니티 Note] 섹션 7-1 (0) | 2025.07.05 |
| [유니티 Note] 섹션 6-3 (0) | 2025.07.02 |