유니티 엔진의 어드레서블은 유니티에서 제공하는 에셋 관리 시스템입니다.
어드레서블 시스템은 에셋을 효율적으로 로드하고 관리할 수 있도록 도와줍니다.
또한 리소스 관리의 복잡성을 줄이고, 메모리 사용을 최적화하는 장점이 있습니다.
이러한 어드레서블은 패키지 매니저에서 Addressables를 import하여 패키지를 설치하는 것으로 활용이 가능합니다.
주소 기반 접근
: 에셋을 주소로 참조합니다. 주소는 문자열로 저장하며, 코드에서 주소를 통해서 접근 가능합니다.
동적 로딩
: 에셋을 동적으로 로드하여 메모리 사용을 최적화할 수 있습니다. 필요할 때만 에셋을 로드하고, 사용하지 않을 때는 언로드하여 해제할 수 있습니다.
그룹 관리
: 에셋을 그룹단위로 묶어서 관리할 수 있습니다. 그룹은 빌드 시에 번들로 패키징되어 배포합니다.
메모리 관리
: Addresable은 자동으로 메모리 관리를 수행하여, 필요하지 않은 에셋을 언로드하고 메모리 사용을 최적화 합니다.
그룹의 번들 모드를 개별적으로 설정하면, 여러 장점이 있습니다.
필요할 때만 해당 번들을 로드하여 사용할 수 있고, 이를 통해서 메모리 사용량을 최적화하는 것도 가능합니다.
또한, 필요할 때만 개별 에셋을 로드할 수 있으므로 로딩 시간을 줄이는 것도 가능합니다.
어드레서블로서 저장된 몬스터 객체들입니다.
몬스터를 이름에 따라서, enum으로 저장합니다.
그리고 enum 변수와 주소값이 매핑된 dictionary에 접근하여, 필요한 몬스터 객체를 저장하는 어드레서블 주소를 받아올 수 있도록 합니다.
풀 매니저는 어드레서블과 오브젝트 풀을 활용한 객체 생성을 담당하는 클래스니다.
어드레서블은 비동기적으로 에셋을 로드하기 때문에, 비동기 작업을 위한 메서드를 따로 구현해야 했습니다.
여기서는 UniTask로 구현되어, ObjectPool<PoolableObject>를 리턴하는 방식으로 만들었습니다.
오브젝트 풀은 사용하지 않는 객체를 Destroy하는 것이 아니라, 비활성 상태로 두는 방식으로, 객체를 관리하는 기법입니다.
어드레서블과 결합하여, 퍼포먼스를 끌어올리는 데 큰 도움이 됩니다.
배틀레드 프로젝트에서도 동일하게 오브젝트 풀 패턴을 사용하여 몬스터와 UI 오브젝트 등을 관리했지만, 이번에는 조금 더 깔끔한 코드 작성을 위해서.
오브젝트 풀에 저장되는 객체를 제네릭 타입으로 받아서 저장하고,
이때, 제네릭 타입의 컴포넌트는 모두 PoolableObject 클래스를 상속받아서, 관리되는 방식으로 바꾸었습니다.