본문 바로가기
Unity3D/Tip

유니티 이벤트 시스템 최적화하기 - Graphic Raycaster 제거하기

by 니키티스 2021. 8. 10.

이벤트 시스템이 렉을 유발하다

어느 순간부터 유니티에서 EventSystem.Update()가 엄청난 렉을 유발했다.

 

원인은 바로 그래픽 레이 캐스터(Graphic Raycaster)였다.

 

아무 생각 없이 캔버스를 생성해놨는데, 미처 그래픽 레이 캐스터를 지우지 못하고 방치했더니 프로파일러가 엄청난 스파이크를 발생시키고 있었다.

 

그래픽 레이 캐스터(Graphic Raycaster)

그래픽 레이 캐스터는 캔버스에 레이저(Ray)를 발사하여 UI에 마우스가 올려졌는지, 클릭하였는지 등을 검사하는 컴포넌트이다.

그래픽 레이 캐스터 - Unity 매뉴얼 (unity3d.com)

 

그래픽 레이캐스터 - Unity 매뉴얼

그래픽스 레이캐스터는 캔버스에 레이캐스트를 하는 데 사용합니다. 레이캐스터는 캔버스의 모든 그래픽스를 감시하여 그 중 하나에 충돌하였는지 여부를 결정합니다.

docs.unity3d.com

버튼이나 슬라이더 같이, 클릭이나 오브젝트 간의 충돌을 이용하기 위해서는 필수적이지만 아닌 경우도 있다.

 

유니티에서 버튼이나 슬라이더 같은 UI 요소를 생성하면 캔버스가 생성된다.

그런데 캔버스는 기본적으로 그래픽 레이 캐스터 컴포넌트가 부착된 상태로 만들어진다.

 

만약 캔버스에 체력 바나 단순한 이미지만 붙여놓았다면 그래픽 레이 캐스터는 쓸모가 없게 된다.

 

아무런 기능이 없기만 하다면 다행이지만, 그래픽 레이 캐스터 자체가 성능 저하를 일으킬 수 있다고 한다.

 

캔버스 두어 개 정도에 그래픽 레이 캐스터를 붙였다면 크게 상관없겠지만, 만약 오브젝트의 수가 수백, 수천 개가 되면 이벤트 시스템이 어마어마한 렉을 유발할 수 있다고 한다.

 

해결 방법

이를 막는 방법은 필요 없는 그래픽 레이 캐스터를 제거하는 것이다.

 

그래픽 레이 캐스터는 클릭이나 마우스를 이용하는 등 상호작용이 필요한 경우가 아니라면 없애도 상관 없다.

 

가능하다면 필요 없는 그래픽 레이 캐스터는 컴포넌트를 지워서 그래픽 레이 캐스터를 최대한 적게 유지하는 편이 좋다고 한다.

 

이외에도 최적화에 도움이 되는 팁들이 참고 자료에 있으니 읽어보면 좋을 것 같다.

 

참고 자료

Event system performance pretty bad - Unity Forum

 

Event system performance pretty bad

Hello, I noticed my game getting "magically" worse and worse performance, so I decided to profile it and see what was up. I noticed that in my...

forum.unity.com

 

Some of the best optimization tips for Unity UI - Unity (unity3d.com)

 

Some of the best optimization tips for Unity UI - Unity

Tons of valuable tips for how to optimize and improve performance of Unity UI.

unity3d.com

 

댓글