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

태사단님의 프로필 이미지
태사단

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

UI에 정보 저장은 어떻게 하나요?

작성

·

372

0

part1부터 정주행 중입니다. 지금 UI까지 본 상태에요.

현재 UI를 호출할 때는 프리팹을 Instanciate로 생성하고, 끌 때는 Destroy로 파괴하는 방식을 사용하잖아요?

RPG에서 인벤토리 같은 UI는 대부분 아이템을 버리거나 옮기는 등의 동작이 가능한데, UI를 파괴했다가 다시 생성하면 항상 초기 값으로 호출됩니다. 혹시 씬에서 변경한 오브젝트나 변수 등이 씬에서 파괴된 후에도 남아 있도록 프로젝트 자체에 저장하는 방법은 없나요?

답변 2

1

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

우선 현재 방식을 100% 지켜야 할 필요는 없습니다.
리소스가 많아지고 반응성이 중요한 UI라면
끌 때 Destroy하지 않고 그대로 들고 있되 보이지만 않게 처리해줄 수도 있습니다.

그와는 별개로 코드 설계상 실제 데이터는
UI 로직과는 별도로 관리하는 것이 좋습니다.
인벤토리를 예로 들면, 인벤이란 곧 소지하고 있는 아이템 목록을 의미하고,
[인벤이 꽉 차면 아이템 더 이상 주을 수가 없다]
[플레이어가 죽으면 인벤에 있는 아이템 하나를 랜덤으로 떨군다] 는 등의 다양한 사양과 엮여 있을 수 있습니다.

반면  UI_Inven은 정말 인벤토리에 있는 정보를 화면 UI에 출력하기 의한 용도로도 사용되니,
실제 데이터를 여기에 들고 있는 것이 맞을지는 살짝 의문이 들겠죠.
인디 게임 수준의 작은 게임이라면 뭘 어디에 관리해도 사실 크~게 상관 없지만,
규모가 조금 커지면 코드가 꼬일 확률이 비약적으로 높아지게 됩니다.
따라서 대부분 데이터는 별도의 클래스 (ex. Inventory)를 파서
일종의 전역 매니저 (ex. MyPlayer나, Managers라거나)에 들고 있고,
UI_ 코드에는 정말 UI와 관련된 코드만 넣는 경우가 많습니다.
(UI_Inven에서 실제 인벤 정보를 조회하기 위해선 Inventory 클래스를 참조하는 방식이 되겠죠)

0

태사단님의 프로필 이미지
태사단
질문자

감사합니다. 개인적으로 클리커 게임을 만들고 있다보니 거의 UI 위주로 진행이 되어서 궁금했어요.

말씀하신대로 로직은 따로 관리하고 UI에는 로직에 따른 값만 적용시켜주는 방향으로 하면 생성/파괴를 반복해도 큰 문제는 없을 것 같네요!

태사단님의 프로필 이미지
태사단

작성한 질문수

질문하기