Inflearn brand logo image

인프런 커뮤니티 질문&답변

restart님의 프로필 이미지
restart

작성한 질문수

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

UI 화면 관리 시스템 Pt.1 (UI 시스템 프레임워크)

캔버스를 여러 장 사용하는 이유

해결된 질문

작성

·

78

0

좋은 강의 감사드립니다.

  • 현재 설계 상 각 씬마다 LobbyUIController, InGameUIController 각각 해당 씬의 UI 캔버스를 가지고 해당 씬 고유의 UI 를 그리고, UIManager 또한 스스로의 캔버스를 가지고 DontDestroyOnLoad 에 남아서 여러 씬에서 공통적으로 사용되는 UI 를 그리고 있는데요.

  • UIManager 가 DontDestroyOnLoad 에 상주하면서 모든 UI 를 그리는 구조와 비교했을 때 장단점이 무엇일지 여쭤보고 싶습니다. 캔버스와 카메라가 많은 것보다 UI 관련 캔버스를 하나로 통일하고 싶은데 스스로 생각해보아도 두 설계의 장단점에 대해 구체적으로 결론내리기가 어려웠습니다.

 

감사합니다!

답변 1

0

BurningCarrot님의 프로필 이미지
BurningCarrot
지식공유자

안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.

 

여러가지 이유가 있지만 가장 대표적인 이유는 효율적인 UI 관리와 개발의 편의성 때문입니다.

 

UIManager에서 사용되는 UI화면은 수시로 열리고 닫히는 팝업의 특성을 갖고 있습니다. 단적인 예로, 게임 기획이 복잡해지면서 특정 상황에서 열려있는 UI 화면들을 모두 일시적으로 닫고(고정 UI 제외) 이후 다시 모두 열어주어야 하는 기능이 필요할 수 있습니다. 이 때 로비UI나 인게임UI 요소들이 같은 캔버스 안에 섞여 있는 경우 하이어라키 및 뎁스 관리로 인해 구현이 까다로워질 수 있습니다.

 

또 로비UI와 인게임UI는 메인 카메라로 렌더링되는 3D 및 게임 플레이 관련 오브젝트들과 시각적으로 잘 어우러지는 확인을 하면서 작업을 해야 하는 경우가 많습니다. 그럴 때 로비씬이나 인게임씬을 열어 이미 고정 UI 요소들이 배치되어 있는 상황에서 맵이나 캐릭터 등의 위치가 적절한지 확인하고 작업하는 것이 편리합니다. 그렇지 않으면 매번 UIManager 오브젝트를 씬에 배치하고, 그 하위에 UI화면 오브젝트를 또 끌어와서 위치시키고, 작업이 끝나면 제거하는 등 번거로운 작업들을 반복해야 합니다. 그리고 이런 불필요한 작업을 반복하다 보면 작업자 중 한 명이 꼭 UIManager를 로비씬이나 인게임씬에 배치한 채로 저장해 버리는 등의 실수를 하게 됩니다.

 

개발 초반 게임이 복잡하지 않을 시 분리의 필요성을 못 느끼실 수 있으나, 점점 더 많은 UI와 기능이 추가되면서 카메라 및 캔버스를 분리하지 않으므로 인해 끊임없이 문제가 발생하는 것을 경험하실 수 있습니다. 이런 이슈를 해결하기 위해 많은 시간을 할애하다 보면 개발의 생산성이 크게 저하됩니다. 그리고 결국엔 가서 애초에 카메라와 캔버스를 분리했다면 모든 것이 편하게 해결되었을텐데라는 생각이 들게 됩니다. 하지만 그땐 이미 재작업을 하기엔 너무 늦었고, 그렇다고 그냥 유지한 채 계속 가려면 계속적으로 비슷한 문제에 직면하게 됩니다. 이런 곤란한 상황에 처하기 전에 애초에 분리된 구조로 잡고 가는 것이 좋다고 판단하여 이런 구조를 제안 드리게 되었습니다. 프로젝트마다 다르지만 현업에서도 유사한 구조를 채택하고 있습니다.

restart님의 프로필 이미지
restart

작성한 질문수

질문하기