Unity bundle 제작 및 사용

Unity는 좋은 기능이 있는데 대체적으로 PC에 전념하는engine가 제공하지 않은 것이 많다. 바로 메인 가방 밖의 자원을 불러올 수 있기 때문이다. 이 메인 가방 밖의 자원을 Unity는 이를 bundle라고 부른다.이 기능의 제공은 주로 웹이나 OS,android 등 장치에서 메인 패키지가 너무 크면 메인 패키지를 다운로드하는 시간이 너무 길고 체험이 좋지 않다.혹은 일부 시장은 메인 가방의 크기를 직접 제한한다.
제작된 버블의 방식은 버블에 scene까지 들어간 것만 설명합니다.
1. 편집기에서 사용하는 메뉴 코드는 다음과 같습니다.
@MenuItem("Tools/Build Streamed Asset Bundle")
static function ExportResource () {
	var path = EditorUtility.SaveFilePanel ("Build Bundle", "", "*", "unity3d");
	if (path.Length != 0)
	{
		var levels : String[] = ["Assets/mybundlelevel.unity"];
		BuildPipeline.BuildStreamedSceneAssetBundle (levels, path, BuildTarget.Android);
	}
}

위 코드의 마지막 줄, 마지막 매개 변수는 필요한 플랫폼으로 채울 수 있습니다.
2. 위에 있는 코드를 넣으면 Unity의 Tools 디렉토리에서 "Build Streamed Asset Bundle"을 찾을 수 있습니다.이 메뉴를 클릭하면 mybund level입니다.유닛 이 씬 생성과 관련된unity3d 파일, 즉 우리가 필요로 하는 bundle 파일입니다.
이렇게 버블을 만드는 과정은 끝났다.메인 가방에서 이 관문을 삭제해서 메인 가방의 공간을 절약할 수 있습니다.주의해야 할 것은 이 관문에 필요한 모든 자원을 삭제할 수 있다는 것이다. 단지 스크립트 파일, shader 파일, 그리고 다른 관문에 인용될 수 있는 파일을 삭제하지 않도록 주의해야 한다.
bundle 사용 방법:
프로그램에서 다음 코드로 버그를 읽고 불러옵니다
WWW download = WWW.LoadFromCacheOrDownload("file://" + dataPath + "mybundlelevel.unity3d", 1);

if (download.error != null)
{
    Debug.LogError(download.error);
    return false;
}
AssetBundle bundle = download.assetBundle;

마지막 코드가 생각보다 필요하지 않다는 것을 주의하십시오. (특히 C와 C++ 프로그래머가 이 문장이 어떤function의 마지막 문장일 수도 있습니다.) Unity 문서에서 이렇게 쓴 후에야 자원이 진정load에 들어올 수 있다고 말했습니다.
LoadFromCacheOrDownload()의 첫 번째 매개변수는 로컬 파일임을 설명하는 URI입니다."http://"로 시작하여 파일이 네트워크에 있다는 것을 설명합니다.
위의 코드가 정확하고 틀림없게 달린 후에 당신은 원래의 level이 이미 당신의 메인 가방에 있다고 생각할 수 있습니다.지금 바로 Application을 사용할 수 있습니다.이 관문을 마운트하려면 LoadLevel () 을 사용하십시오.
상술한 방식에 대해 필자는 안드로이드 플랫폼에서 테스트를 했는데 전혀 문제가 없었다.게다가 적재 속도도 매우 빨라서 유니티 포럼에서 외국인이 적재하는 속도가 매우 느려서 필자는 만나지 못했다.
또한, 이 과정은 당신에게 머리를 잡게 하는 문제에 부딪힐 수도 있다.
Application.LoadLevel () 시 Unity가 "xxx couldn't be loaded because it has not been added to the build settings"로 잘못 보고되었습니다.이 문제의 발생은 다음과 같은 몇 가지를 검사할 수 있다.
1. 버블을 생성할 때 버블 생성에 오류가 없음;
2. 버블은 일정한 방식으로 정확한 경로에 놓았다.
3. LoadFromCacheOrDownload()의 매개 변수 1은 file://또는 http://로 시작합니다.
4. LoadFromCacheOrDownload()의 두 번째 파라미터를 변경할 수 있다.
5、AssetBundle을 사용하세요.Unload();
고려할 필요가 없는 것은bundle에 있는scene(level)는 BuildSetting에 표시할 필요도 없고, 체크할 방법도 없다. 왜냐하면 네가 삭제했기 때문이다. 그렇지!Unity의 이 잘못된 힌트는 사람들로 하여금 헛된 생각을 하게 하기 쉽다.

좋은 웹페이지 즐겨찾기