Unity 에셋 번들 생성 및 활용 가이드
이 문서는 Unity에서 에셋 번들을 생성하고 활용하는 방법에 대해 설명합니다. 에셋 번들은 게임에서 리소스를 효율적으로 관리하고 배포하는 데 큰 도움이 됩니다. 아래의 단계별 가이드를 통해 에셋 번들을 쉽게 설정하고 사용할 수 있습니다.
에셋 번들 준비하기
에셋 번들을 만들기 위해서는 다음 단계를 따릅니다. 각 단계 세부 사항에 대한 추가 정보는 문서의 다른 페이지를 참조하세요.
1. 에셋 할당
에셋을 에셋 번들에 할당하려면 다음 과정을 따릅니다:
- 프로젝트 뷰에서 에셋을 선택합니다.
- 인스펙터 창을 엽니다.
- 인스펙터 하단에서 에셋 번들과 변형 옵션을 설정합니다.
- 왼쪽 드롭다운에서 에셋 번들을 선택합니다.
- 오른쪽 드롭다운에서 변형을 설정합니다.
- "New"를 클릭하여 새로운 에셋 번들을 생성하거나, 이미 있는 에셋 번들을 선택합니다.
- 에셋 번들 이름에 따라 폴더 구조를 지원합니다. 하위 폴더는 '/'로 구분하여 설정합니다. 예:
environment/forest
2. 에셋 번들 빌드하기
자, 이제 에셋 번들이 준비되었으면 빌드해보겠습니다.
- 에디터 폴더 생성:
Assets폴더 내에Editor라는 이름의 폴더를 생성합니다. - 스크립트 추가: 아래의 스크립트를 작성합니다.
using UnityEditor;
using System.IO;
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
string assetBundleDirectory = "Assets/AssetBundles";
if (!Directory.Exists(assetBundleDirectory))
{
Directory.CreateDirectory(assetBundleDirectory);
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory,
BuildAssetBundleOptions.None,
BuildTarget.StandaloneWindows);
}
}
위 스크립트는 Assets 메뉴에 "Build AssetBundles"라는 항목을 추가합니다. 이 항목을 클릭하면 모든 에셋 번들이 지정된 디렉토리에 빌드됩니다.
에셋 번들 로드하기
에셋 번들을 로드하는 방법에는 두 가지가 있습니다: 로컬 파일 시스템에서 로드하거나 웹을 통해 로드합니다.
1. 로컬 파일로부터 로드하기
아래의 예제 코드는 로컬 파일에서 에셋 번들을 로드하는 방법을 보여줍니다.
public class LoadFromFileExample : MonoBehaviour {
void Start() {
var myLoadedAssetBundle
= AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
if (myLoadedAssetBundle == null) {
Debug.Log("Failed to load AssetBundle!");
return;
}
var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");
Instantiate(prefab);
}
}
2. 웹에서 로드하기
웹에서 에셋 번들을 다운로드하고 인스턴스화하는 코드 예시는 다음과 같습니다.
IEnumerator InstantiateObject()
{
string url = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;
var request
= UnityEngine.Networking.UnityWebRequestAssetBundle.GetAssetBundle(url, 0);
yield return request.Send();
AssetBundle bundle = UnityEngine.Networking.DownloadHandlerAssetBundle.GetContent(request);
GameObject cube = bundle.LoadAsset<GameObject>("Cube");
GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
Instantiate(cube);
Instantiate(sprite);
}
이 코드는 지정된 URL에서 에셋 번들을 다운로드하고, 그 안의 객체를 인스턴스화합니다.
참고 자료
- 에셋 번들 및 에셋 로딩 API에 대한 자세한 내용은 Unity 공식 문서를 방문하세요.
- 추가적인 활용 예제와 스크립트는 Unity Asset Store와 같은 커뮤니티 리소스를 통해 찾아볼 수 있습니다.
이제 에셋 번들을 활용하여 게임 개발에서 리소스 관리가 더욱 쉬워지길 바랍니다!