반응형
오늘 배운 것 (by 명민 튜터님)
전투에 필요한 유닛 로직을 먼저 생성하고, 외형 리소스는 비동기로 따로 로드하는 구조를 사용하면,
방치형 게임에서 빠르고 효율적인 유닛 스폰이 가능하다.
왜 이런 구조?
방치형 게임에서 전투는 멈추지 않고 유닛이 자주 등장한다. 유닛을 생성할 때 프리팹 전체를 로드해서 스폰하면 다음과 같은 문제들이 있다.
- Addressable에서 비동기로 받아와서 생성하기 때문에 완전히 로드될 때까지 딜레이가 발생. (-> 그동안 전투를 시작할 수 없음)
- 메모리 낭비 및 프레임 드랍 가능성 발생.
- 문제를 방지하려면 모든 유닛의 애니메이션, 사운드, VFX와 같은 외형 데이터를 미리 로드해야 함.
해결 전략
로직 전용 프리팹과 외형 전용 프리팹을 분리.
1. 어떠한 유닛들의 웨이브를 스폰하는 곳에서는 Instantiate로 코어 로직을 생성. (동기)
2. 생성할 때 해당 유닛이 어떤 타입인지 지정해 줌. (ex: Goblin)
3. 자신의 타입에 해당하는 외형 프리팹을 Addressables.LoadAssetAsync를 사용해서 로드. (비동기)
중요한 건 이 게임이 방치형 게임이 가능한 구조라는 것이다. 유저 인풋에 즉각 반응해서 전투를 진행하는 게임이 아니고, 시각적 요소보다 게임의 지속성과 흐름 유지가 더 중요하기 때문에 이 구조가 적합한 것이다. 외형 로딩이 보통 1초도 안돼서 완료되기 때문에 외형만 그 정도 딜레이가 있는 것은 사용자 경험을 해치지 않고 전투 흐름에 문제가 생기지 않는다.
이 구조의 장점
- 빠른 전투 시작 - 로딩을 기다리지 않고 즉시 전투 시작 가능
- 메모리 최적화 - 외형 리소스는 필요한 시점에만 로드
- 구조 분리 - 유닛 로직과 표현을 모듈화하여 관리나 확장성 용이 (외형만 갈아 끼우기 쉽겠다)
반응형
'프로젝트 일지 > Unity' 카테고리의 다른 글
[Unity/TIL] '오집마' 최종 프로젝트 개발일지 (2) | 2025.04.16 |
---|---|
[Unity/TIL] 프리팹 Variant (2) | 2025.04.15 |
[Unity/TIL] MonoBehaviour 상속받지 않는 곳에서 코루틴 사용하는 방법 (8) | 2025.04.11 |
[Unity/TIL] 싱글톤 매니저 관리 (2) | 2025.04.10 |
[Unity/TIL] Addressable 연구(2) (2) | 2025.04.09 |