728x90
Unity
- Unity Addressables는 Unity에서 리소스(assets)를 더 효율적으로 관리하고 로드하기 위한 강력한 시스템이다. Addressables을 사용하면 동적 콘텐츠 관리, 메모리 최적화, 게임의 로딩 시간 감소와 같은 기능을 쉽게 구현할 수 있다.
1. Addressables이란?
- Unity Addressables 시스템은 게임 리소스(텍스처, 사운드, 모델, 애니메이션 등)를 어드레서블(Addressable)하게 만드는 기능을 제공한다.
- 리소스에 주소를 부여하고, 이 주소를 사용하여 해당 리소스를 필요할 때 로드하거나 언로드할 수 있다. 이 방식은 리소스를 다루는 전통적인 Unity의 Resources 폴더 및 Asset Bundles의 한계를 극복하기 위해 설계되었다.
2. Addressables의 주요 개념
- Addressable Asset
- 어드레서블 에셋은 Addressables 시스템을 통해 주소로 관리되는 리소스다. 에셋을 Addressable로 만들면 Unity가 자동으로 이를 관리하며, 메모리에서 로드하거나 해제하는 작업을 유연하게 처리할 수 있다.
- Address
- 각 에셋은 고유한 주소를 가진다. 이 주소는 문자열로, 코드에서 해당 주소를 참조해 에셋을 로드하거나 해제할 수 있다. 에셋의 이름, 파일 경로, 또는 사용자가 지정한 별칭이 주소로 사용될 수 있다.
- Asset Groups
- Addressables 시스템에서 여러 에셋을 그룹으로 묶을 수 있다. Asset Group은 Addressables 에셋을 빌드하고 배포할 때 중요한 역할을 하며, 각 그룹은 게임 배포 시 애셋 번들로 패키징된다. 이러한 그룹은 특정 플랫폼에 맞는 설정을 가지거나, 동적으로 로드될 리소스의 묶음으로 관리된다.
- Remote Content
- Addressables는 원격 서버에서 리소스를 가져올 수 있다. 이를 통해 앱의 용량을 줄이면서 네트워크를 통해 필요한 리소스를 동적으로 로드하는 방식이 가능하다. 예를 들어, 게임 업데이트 없이 새로운 콘텐츠를 배포할 수 있다.
3. Addressables 사용의 주요 이점
- 메모리 관리
- Addressables 시스템을 사용하면, 필요할 때만 리소스를 로드하고 사용이 끝나면 메모리에서 해제할 수 있다. 이를 통해 불필요하게 메모리를 차지하는 리소스를 줄일 수 있어, 메모리 관리가 더 쉬워진다.
- 더 나은 빌드 관리
- Addressables는 리소스들을 빌드의 각 부분으로 나눌 수 있는 기능을 제공한다. 이를 통해 개발자는 리소스를 언제, 어디서 로드할지 선택할 수 있다. 또한, 빌드를 다시 하지 않고도 원격 서버에서 새로운 리소스를 제공할 수 있다.
- 빠른 로딩 시간
- 게임 시작 시 모든 리소스를 한꺼번에 로드하는 대신, Addressables 시스템을 사용하면 필요한 시점에만 리소스를 로드할 수 있다. 이는 로딩 시간을 줄이는 데 도움이 된다.
- 멀티 플랫폼 지원
- Addressables는 멀티플랫폼 게임 개발에 매우 유리하다. Unity의 다른 빌드 플랫폼들과도 잘 호환되며, 각 플랫폼에 맞춘 최적화를 할 수 있다.
Addressables 시스템의 주요 기능
- 동적 로드 및 언로드
- Addressables는 게임 내 특정 시점에서 필요한 리소스만 메모리에 로드할 수 있다. 게임의 특정 씬이나 레벨이 로드될 때 필요한 리소스만 가져오고, 사용이 끝나면 메모리에서 언로드하여 메모리 사용량을 최소화할 수 있다.
- using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class AddressablesExample : MonoBehaviour { void Start() { // "myAssetAddress" 주소를 통해 에셋을 로드한다. Addressables.LoadAssetAsync<GameObject>("myAssetAddress").Completed += OnAssetLoaded; } void OnAssetLoaded(AsyncOperationHandle<GameObject> obj) { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject loadedAsset = obj.Result; Instantiate(loadedAsset); } } }
- 원격 리소스 관리
- Addressables 시스템은 CDN(콘텐츠 배포 네트워크)이나 클라우드 서버를 통해 원격에서 리소스를 로드할 수 있다. 이를 통해 게임 업데이트 없이 새로운 콘텐츠를 동적으로 제공할 수 있으며, 초기 게임 설치 파일 크기를 줄일 수 있다.
- 프로파일 기반 설정
- Addressables은 프로파일 시스템을 제공하여, 개발 중인 환경과 실제 배포 환경에 따라 리소스를 다르게 관리할 수 있다. 예를 들어, 로컬 테스트에서는 로컬 파일을 사용하고, 실제 빌드에서는 원격 서버에서 리소스를 가져오는 방식으로 설정할 수 있다.
- 애셋 번들 관리
- Addressables 시스템은 기존 애셋 번들을 더 쉽게 관리하고 로드할 수 있게 해준다. 빌드 시 에셋 번들로 변환되며, 이 번들을 주소를 통해 로드하거나 관리할 수 있다.
5. Addressables 사용 시 고려사항
- 초기 세팅
- Addressables을 처음 사용하는 경우, Unity 프로젝트 내 리소스에 주소를 부여하는 설정을 해야 한다. 이를 위해 Addressables Groups 창에서 리소스를 Addressable로 지정할 수 있다.
- 원격 콘텐츠 업데이트
- 원격 서버에서 리소스를 로드할 때는 네트워크 상황을 고려해야 한다. 느린 네트워크 환경에서는 리소스 로딩 시간이 길어질 수 있으며, 네트워크가 끊길 가능성도 고려해야 한다.
- 빌드 관리
- Addressables은 리소스가 어떻게 빌드되고 배포되는지를 명확히 관리해야 한다. 리소스를 동적으로 관리하는 시스템이므로, 게임의 흐름에 따라 올바른 리소스를 적절한 시점에 로드하도록 설정하는 것이 중요하다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.11.17 CS (2) | 2024.11.17 |
---|---|
24.11.16 CS (0) | 2024.11.16 |
24.11.14 CS (0) | 2024.11.14 |
24.11.13 CS (1) | 2024.11.13 |
24.11.12 CS, C++ (3) | 2024.11.12 |