Unity/Unity 개발

스테이지 기반 자원 리스폰 시스템 설계

leedh1211 2025. 6. 4. 20:28

학습 동기

게임의 각 스테이지마다 등장하는 자원(Metal, Bio, Water 등)의 종류와 수량이 달라야 했다. 이 데이터를 하드코딩하지 않고, 스테이지 별로 독립적으로 설정할 수 있도록 설계하고자 했다. 더불어 자원 생성은 Instantiate 대신 Object Pool을 통해 관리하고, 스테이지 상태 변화에 따라 자동으로 리스폰, 제거가 이루어지는 구조를 구축하고자 했다.

학습 내용

StageRespawnObject라는 ScriptableObject를 설계하여, 각 스테이지마다 어떤 자원이 몇 개 생성되어야 하는지를 데이터화했다. 이 데이터를 ResourceController가 받아서 ResourcePool을 통해 실제 자원을 생성 및 재사용하는 구조로 구현했다. FarmingPhase가 시작될 때 자원을 생성하고, 종료될 때는 자원을 회수하는 흐름은 EventBus를 통해 분리하여 관리했다.

이전에는 Instantiate 방식으로 자원을 매번 생성했기 때문에 메모리 낭비가 있었지만, 풀링 시스템을 도입한 후에는 일정량만 유지하며 필요한 만큼만 활성화시키는 방식으로 전환되었다. 자원이 수거되지 않았을 경우나 예외 상황에서는 MissingReferenceException이 발생할 수 있어, 반환 시점에서 null 체크 로직을 추가해 안정성을 확보했다.

To-do

 

  • StageRespawnObject 자동 생성 및 수정용 에디터 툴 제작 고려
  • 자원이 비활성화될 때 오브젝트 상태(효과, UI 등) 초기화 루틴 추가
  • 스테이지 구조 변경 시 자원 위치가 자동 갱신되도록 anchor 방식 변경 테스트
  • 자원 수거 애니메이션 및 이펙트 연동 여부 검토

 

주의점

ScriptableObject를 통해 데이터를 설계하고, 풀링 시스템과 연동하니 유지보수성과 성능이 동시에 향상되었다. EventBus를 통해 상태 전환에 따라 관련 동작을 분리하니 코드 결합도도 낮아졌고, 여러 시스템이 함께 동작하더라도 구조가 깔끔하게 유지되었다. Unity에서 게임의 페이즈 흐름을 관리할 때 이러한 설계 방식이 매우 효과적임을 다시 느꼈다.