
在本文中,3D天堂向大家解释如何在Unity项目中加载资产包,大家可以参考此文在Unity中创建资产包。
Unity加载资产包
可以在本地或从URL加载资产包,首先使用WWW类下载资产包,然后可以从包中加载对象,可以使用WWW类的方法下载资产包。
非缓存
使用WWW类的对象下载数据,不会缓存在设备的本地存储中。
void Start () {
string url = "your url";
StartCoroutine (loadWWWNonCaching (url));
}
IEnumerator loadWWWNonCaching (string url){
WWW www = new WWW (url);
yield return www;
if (string.IsNullOrEmpty(www.error)) {
AssetBundle assetBundle = www.assetBundle;
} else {
Debug.Log ("WWW error: " + www.error);
}
}
缓存:WWW
LoadFromCacheOrDownload方法可以从缓存内存或通过下载加载资产包,如果缓存是干净的,那么它将下载资产包,否则它将从缓存内存加载资产包。
资产包被缓存到本地存储设备中的Unity缓存文件夹中,不同平台(web player, android, mac)缓存大小不同,但Unity网络播放器允许缓存50MB的数据。
void Start () {
string url = "your url";
StartCoroutine (loadWWWCaching (url));
}
IEnumerator loadWWWCaching (string url){
while (!Caching.ready)
yield return null;
using (WWW www = WWW.LoadFromCacheOrDownload (url, 1)) {
yield return www;
if (string.IsNullOrEmpty(www.error)) {
AssetBundle assetBundle = www.assetBundle;
} else {
Debug.Log ("WWW error: " + www.error);
}
}
}
还可以使用AssetBundle.LoadFromFile(“Your path”)方法从文件加载资产包,通常可以将资产存储在应用程序流媒体资产文件夹中,并可以从那里加载。
从资产包中加载游戏对象
首先从下载的数据中创建一个AssetBundle类的对象,然后可以从该资产包中加载对象,可以使用下面提到的AssetBundle类方法从资产包中加载对象。
- LoadAsset:此方法将按名称加载对象,传递要加载的对象的名称。
- LoadAssetAsync : 与上述方法相同,但异步加载对象;所以不会阻塞应用程序的主线程。
- LoadAllAssets:此方法将加载资产包中的所有对象。
从资产包中加载游戏对象后,将其实例化以在场景中使用。
AssetBundle assetBundle = www.assetBundle;
// Load asset by name
GameObject gObject = assetBundle.LoadAsset("name of your game object") as GameObject;
// load asset asynchronously
AssetBundleRequest request = assetBundle.LoadAssetAsync ("name of your game object", typeof(GameObject));
// Wait for request to complete
yield return request;
GameObject gObject2 = request.asset as GameObject;
// load all assets
assetBundle.LoadAllAssets();
// instantiate the game object
if (gObject != null) {
Instantiate (gObject);
}
从资产包加载场景
首先从关联的场景资产包中加载所有资产,然后使用SceneManager.LoadScene方法加载场景。
assetBundle.LoadAllAssets();
SceneManager.LoadScene ("name of scene");
卸载资产包
从资产包中加载对象后,使用AssetBundle卸载资产包,卸载方法这有助于节省内存并提高性能。
assetBundle.Unload (true);
…
以上是3D天堂关于在Unity中加载资产包的全部内容,如果你有任何反馈,请随时在本页面下方留言。