AssetBundle (Pro Only)
Unity3D 2013. 1. 10. 19:17안드로이드 마켓에 경우 50mb 용량 제한이 있다.
요즘의 게임들은 용량이 큰것들이 많은데 보통 시작시 타이틀화면과 동시에 리소스데이터를 다운받는 형식으로 많이 개발하고 있다.
이것이 바로 인앱 업데이트 방식인데, 이것은 서비스후 운영의 용이성을 도모한다.
그럼 유니티에서 어떻게 구현하여 사용하는지 알아보도록 한다.
그전에 이미 많은 국내 유저들의 포스팅에도 잘 나와있다.
참고: http://botta.tistory.com/38
어셋번들로 만들어진 파일은 더이상 Resource폴더에 있지 않아도 되니 릴리즈 버젼 빌드시 프로젝트에서 제거해도 무관하다.
하지만 추후 업데이트및 수정작업을 고려해 리소스 백업은 필수라 할수있다.
때문에 Resources와 ResoucesBundle폴더를 생성해서 번들로 만들어져야 하는것들은 다음과 같이 따로 관리 하는것이 좋다.
프리팹도 어셋번들로 만들어 사용할수 있는데 이렇게 만들어진 프리팹의 매시데이터, 텍스쳐, 메트리얼등을 포함하여 함께 가지게 된다.
이때 주의 사항은 같은 메트리얼을 사용하는 여러 오브젝트는 한번에 어셋번들로 만들어야 한다는것이다. 그렇지 않을경우 동일한 메터리얼의 리소스들이 중복이 되어 예기치 못한 에러상황을 만들어 낼 수 있으니 주의 한다.
만드는 법은 매우 간단하다.
Project패널에서 어셋번들로 만들 오브젝트의 우클릭을 하게 되면 다음과 같은 메뉴가 나온다.
그냥 나오는것은 아니다
CreateAssetBundle스크립트 파일을 Editor에 추가해 줘야 한다.
내용은 별거 없다.
using UnityEngine;
using System.Collections;
using UnityEditor;
using System;
using System.IO;
public class CreateAssetBundle : MonoBehaviour {
String str;
}
public class cre :MonoBehaviour
{
[MenuItem("Assets/Build AssetBundle From Selection - No dependency tracking")]
static void ExportResourceNoTrack () {
// Bring up save panel
string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "bfbundle");
if (path.Length != 0) {
// Build the resource file from the active selection.
BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, path, BuildAssetBundleOptions.CollectDependencies, BuildTarget.iPhone);
}
}
}
다음의 우클릭 하면 나오는 메뉴는 이부분 인것이다.
[MenuItem("Assets/Build AssetBundle From Selection - No dependency tracking")]
번들로 만들어지게 되면 다음과 같이 파일명을 적은후 저장하게 된다.
이때 생성되는 확장자명은 임의로 설정할수있다.
다음은 웹에 올려 놓고 불러오는 부분을 확인해본다.
웹서버에 만든 어셋번들 파일을 올려놓는다.
WWW를 통해 로드 하게 되면 다음과 같이 생성하여 사용 할 수 있다.
다음 API를 확인하면 금방 예제를 만들어 볼수 있을듯 하다.
http://www.devkorea.co.kr/reference/Documentation/ScriptReference/AssetBundle.html
AssetBundleObject로 부터 상속됨
AssetBundles은 사용자로 하여금 추가적인 에셋을 WWW 클래스를 통하여 스트리밍을 하고 런타임에 인스턴스를 생성할 수 있게 해줍니다. AssetBundles은 BuildPipeline.BuildAssetBundle을 통해 생성됩니다.
참고: WWW.assetBundle, Loading Resources at Runtime, BuildPipeline.BuildPlayer.
var www = WWW ("http://myserver/myBundle.unity3d");
yield www;
// 지정된 메인 에셋을 가져다가 인스턴스를 생성합니다.
Instantiate(www.assetBundle.mainAsset);
}
'Unity3D' 카테고리의 다른 글
WWW.assetbundle (1) | 2013.01.14 |
---|---|
[C#] Action 제네릭 대리자 (0) | 2013.01.10 |
Application.persistentDataPath (0) | 2013.01.10 |
Object.DontDestroyOnLoad (0) | 2013.01.10 |
LayerMask.LayerToName (0) | 2013.01.08 |