Programing/Unity(C#)

[Unity] Sprite가 UI 이미지 위에 보이게 하기

hye3193 2024. 2. 8. 13:42

일반적으로 Sprite들은 canvas 위에 올라간 UI의 뒤에 보이게 되는데, 이를 UI 앞으로 보이게 하고 싶었다

 

우선 Main Camera 외에 UI_Camera를 만들어 준 다음

위와 같이 각 카메라 설정을 해 주면 된다

체크해야 하는 부분은

Main Camera

Clear Flags = Don't Clear 또는 Depth Only

Culling Mask = Default

Depth (UI Camera의 Depth보다 숫자가 높으면 된다)

 

UI Camera

Culling Mask = UI

Depth

 

사용할 UI의 Layer는 UI로 설정되어 있어야 한다

 

그리고 Canvas 컴포넌트에서 Render Mode를 Screen Space - Camera로 변경해 준 다음, UI_Camera를 Render Camera에 넣어 주면 된다

 

그런데 나의 경우, UI를 프리팹으로 만들어 인스턴스 객체로 띄우고 있었기에 인스펙터 창에서 바로 카메라를 지정할 수 없어서 코드로 작성했다

Camera uiCamera = GameObject.FindWithTag("UICamera").GetComponent<Camera>();
gameObject.GetComponent<Canvas>().renderMode = RenderMode.ScreenSpaceCamera;
gameObject.GetComponent<Canvas>().worldCamera = uiCamera;

해당 UI의 스크립트에서 초기화하는 부분에 넣어주면 된다

(RenderMode 설정은 해당 UI 프리팹의 인스펙터 창에서 해줘도 무방하긴 함)

코드에서 UI Camera를 찾기 위해서 UI_Camera에 UICamera 태그도 추가로 붙여주자

GameObject go = Managers.Resource.Instantiate($"UI/Popup/{name}", Root.transform);
go.layer = 5; // 5: UI

추가로 혹시나 Layer가 UI로 설정되어 있지 않아 화면에 뜨지 않는 상황을 방지하기 위해 UI Manager에서 ui 객체를 생성할 때 layer를 5(ui)로 변경해주는 코드도 작성하였다

 

 

참고

https://blog.naver.com/inceleb/220687133326

https://stackoverflow.com/questions/41172136/how-to-change-the-canvas-render-camera-via-c-sharp