Unity 에셋 번들 이해하기
이 문서는 Unity의 에셋 번들에 대한 공식 가이드를 한국어로 쉽게 설명하고, 다양한 활용 및 응용 예제를 포함합니다.
에셋 번들 정의
에셋 번들은 Unity 프로젝트 내에서 오브젝트와 그들의 종속성을 포함하는 패키지입니다. 이를 통해 여러 에셋을 효율적으로 관리하고 로드할 수 있습니다.
에셋 번들의 종속성
- 에셋 번들은 다른 에셋 번들에 의존할 수 있습니다.
- UnityEngine.Object에 대한 레퍼런스가 포함된 경우, 해당 에셋 번들은 다른 에셋 번들에 종속됩니다.
- 에셋 번들은 종속성을 로딩하기 이전에 인스턴스화된 오브젝트가 로딩됩니다.
예제
- 번들 1이 번들 2의 텍스처를 참조한다고 가정할 때,
- 번들 1의 머티리얼을 로딩하기 전에 반드시 번들 2를 로드해야 합니다.
에셋 번들 간의 중복 정보
Unity는 에셋 번들 간의 중복 정보를 최적화하지 않습니다. 여러 에셋 번들에서 동일한 에셋(예: 머티리얼)을 사용할 경우, 이는 프로젝트의 메모리 리소스와 로딩 시간에 영향을 미칠 수 있습니다.
공통 에셋 관리
공통 에셋을 별도의 에셋 번들로 관리하여 중복을 방지할 수 있습니다. 예를 들어:
- 두 개의 프리팹이 동일한 머티리얼을 공유하는 경우
- 이 머티리얼을 별도의 에셋 번들에 할당해야 합니다.
에셋 번들 빌드
Standard AssetBundle 생성의 예제는 다음과 같습니다.
using System.IO;
using UnityEngine;
public class InstantiateAssetBundles : MonoBehaviour
{
void Start()
{
var materialsAB = AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, "AssetBundles", "modulesmaterials"));
var moduleAB = AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, "AssetBundles", "example-prefab"));
if (moduleAB == null)
{
Debug.Log("Failed to load AssetBundle!");
return;
}
var prefab = moduleAB.LoadAsset<GameObject>("example-prefab");
Instantiate(prefab);
}
}
위 코드에서 materialsAB와 moduleAB는 각각 머티리얼과 프리팹에 대한 에셋 번들을 로드합니다. 이를 통해 올바르게 머티리얼을 로딩한 프리팹을 인스턴스화 할 수 있습니다.
런타임 로딩 주의사항
- 공통 에셋은 종속성에 따라 정확한 순서로 로드해야 합니다.
- 머티리얼이 로드되지 않으면 프리팹이 제대로 에셋을 표시하지 못합니다.
결론
이 문서에서는 Unity의 에셋 번들 시스템의 기본적인 동작 방식과 종속성 관리에 대한 이해를 돕기 위해 다양한 내용을 다루었습니다. 에셋 번들의 최적화와 관리가 프로젝트의 성능 개선에 기여할 수 있습니다.