본문 바로가기

develop

[Unity] AssetBundle 사용하기 - 로컬에서 모바일(안드로이드)로 로드하기

하나. 유니티 프로젝트 폴더의 'StreamingAssets' 폴더에 assetBundle 을 둔다.

유니티에서 안드로이드로 빌드하면 apk 파일이 생성됩니다. 이 파일은 프로젝트 폴더가 압축된 거라고 보면 됩니다.

AssetBundle은 프로젝트 폴더에서 'StreamingAssets'라는 이름의 폴더에 넣어야 apk 파일의 'Assets'이라는 이름의 폴더에 위치하게 됩니다.

이 'Assets' 폴더는 이클립스로 android project를 개발할 때의 'Assets' 폴더입니다.

유니티 프로젝트 폴더에서 'Resources' 폴더의 내용은 apk 파일의 'bin' 폴더 아래에 위치하게 됩니다.

 

둘. AssetBundle 을 로드한다.

플랫폼에 따라서 다른 경로로 접근한다.

MAC OS or Windows 에서는

path = Application.dataPath + "/StreamingAssets";

iOS 에서는

path = Application.dataPath + "/Raw";

Android 에서는

path = "jar:file://" + Application.dataPath + "!/assets/";

이렇게 로드한다.

예를 들어서 android 에서 'A.unity3d' 라는 assetBundle 을 로드하고 싶다면,

path = "jar:file://" + Application.dataPath + "!/assets/A.unity3d";

이렇게 로드한다.

 

using UnityEngine;
using System.Collections;

public class LoadFromAndroidLocal1 : MonoBehaviour
{
	private string path = "jar:file://" + Application.dataPath + "!/assets/A.unity3d";

	void OnGUI ()
	{
  		if ( GUILayout.Button ( "Load Asset" ) )
  		{
   			StartCoroutine ( LoadAsset ( path, 1 ) );
  		}
 	}

 	IEnumerator LoadAsset ( string path, version ) )
	{
  		while ( !Caching.ready )
  		{
			yield return null;
		}

  		using ( WWW asset = WWW.LoadFromCacheOrDownload ( path, version ) )
  		{
   			yield return asset;

   			if ( asset.error != null )
	   		{
				Debug.Log ( "error : " + asset.error.ToString () );
   			}
   			else
   			{
				GameObject go = GameObject.CreatePrimitive ( PrimitiveType.Plane );
				go.transform.rotation = Quaternion.Euler ( new Vector3 ( 0f, 180f, 0f ) );
				go.renderer.material.mainTexture = asset.assetBundle.mainAsset as Texture2D;
   			}

   			asset.assetBundle.Unload ( false );
  		}
 	}
}

- 위의 코드를 보면 이제까지와 크게 다른 부분은 없지만, path를 초기화하는 부분이 바뀌었습니다.

반응형