[내일배움캠프 본 캠프 43일차] 심화프로젝트 개인 4일차

2025. 11. 27. 23:40본 캠프

이번 개인 프로젝트를 진행하면서 느낀점 중에 하나는 UI는 의존성이 꽤 높다는 것. 보여주고 싶은 정보들이 많을 수록

패널 및 버튼들이 많아져서 연결할게 많아진다는 것이고

 

의존성이 강해진다면 비동기 구조를 썼을 때 에러가 날 확률이 높아서 설계를 꼼꼼히 해야한다는 것도 배웠다.

 


 

오늘은 플레이어 스탯과 장착했을 때의 스탯변화

그리고 아이템인스턴스 생성(추가옵션 랜덤)을 저장해서 로드하는 기능을 구현했다.

 

 

DataManager를 통해 각 저장할 데이터들을 매개변수로 넣고 json으로 저장해두면 SaveData가 남는다.

 

전 프로젝트까지는 대부분의 클래스를 MonoBehaviour를 상속받아 유니티 생명주기를 주로 활용했다면

이번 개인 프로젝트에서는 데이터를 다루고 변환하는 과정을 주로 활용해봐서 좋은 경험이었다.

 

동기와 비동기에 대한 차이를 명확히 인지하고 비동기로 데이터를 처리하는 방법을 알게되면

프로젝트 구조가 커지고 JSON과 프리펩들이 많아도 로딩 신을 통해서 메모리누수나 불러올 때의 렉을 줄 일 수 있을 것이다.

 

아직 Addressable 형식을 제대로 써보진 않았는데 다음 프로젝트에서는 꼭 한번 다뤄봐야 한다.

그래야 게임의 로딩렉이나 수많은 에셋들을 효과적으로 신에 불러올 수 있기 때문에 속성들에 대해서 자세히 알 필요가 있다.


 

 

어드레서블 키를 부여해놓은 상태에서 foreach로 키를 계속 반복하면서 찾고 에셋들을 불러온다.

그리고 그 불러온 에셋들을 다시 리스트로 묶어서 등록해놓고

그 리스트를 또 foreach로 돌면서 안의 키들을 대기 시켜놓고

90%까지 로딩바가 진행됐을 때 잠깐 멈춰놨다가 원하는 타이밍에 씬을 활성화 시킨다.

 

위의 구조는 앞으로 내가 할 프로젝트에서 요긴하게 쓸 LoadSceneAsync 방식이다.


초기 개발은 GameManager를 통해 싱글턴 구조를 활용해서 진행하겠지만 점차 프로젝트가 커지고 Scene이 많아질 수록

Scene 중심 설계로 서서히 바뀌게 될텐데 해당 부분에 대해서도 공부가 필요하다.

 

이번 프로젝트에서 GameManager,HUDManager,CharacterManager,Player는 DDOL로 전역으로 관리하지만

UIManager는 신에 두고 GameManager가 해당 신에 진입했을 때 매니저와 연결되도록 하고 HUDManager도 신에 있는 HUDUI에 연결하도록 하는 작업을 진행했었다.

 

물론 신은 두개 밖에 없지만 추후 작업에서 캐릭터 인벤토리 신이나 신이 넘어갔을 때

HUD를 숨긴다던지 다양한 연출과 장치를 활용할 수 있기에 해보고 싶었다.

 

Player를 전역으로 관리하는 것과 신이 넘어가도 데이터를 계속 유지하도록

데이터관리매니저를 따로 두는 것도 해보는 좋은 경험이었다.

 

아쉬운 점은 EventBus를 써보지 못했다는 점이 남는다.

스탯변화를 해당 구조를 활용했다면 좋았을텐데 아직 개념에 대한 걸 알아도 잘 이해는 못했기에 써보지 못했다.