unity AssetBundle打包及加载
unity版本2017.3.0
1.以下几个api已经弃用
打包只能用:
2.加载大部分用WWW加载
例子:
打包代码:
#if UNITY_EDITOR using UnityEditor; using UnityEngine; public class AssetBundleData: MonoBehaviour { [MenuItem("Assets/buildPrefab")] //在Assets下面显示一个buildPrefab按钮用来打包
static void AssetBundleGameObject() { string path = Application.dataPath + "/AssetBundle"; BuildPipeline.BuildAssetBundles(path,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64); AssetDatabase.Refresh(); //刷新unity中的资源 } } #endif
加载:
using System.Collections; using UnityEngine; public class GameManager : MonoBehaviour { IEnumerator InstanceGameObj() //加载游戏物体 { string path =Application.dataPath+ "/AssetBundle/cube.prefab"; WWW wWW = new WWW(path); yield return wWW; if(string.IsNullOrEmpty(wWW.error)) { AssetBundle assetBuild =wWW.assetBundle; GameObject[] obj = assetBuild.LoadAllAssets<GameObject>(); Instantiate(obj[0]); foreach (GameObject item in obj) { Debug.Log(item.name); // Instantiate(item); } } else { Debug.Log(wWW.error); } yield return null; } IEnumerator InstanceScene()//加载游戏场景 { string path = Application.dataPath + "/AssetBundle/loadscene.scene"; WWW wWW = new WWW(path); yield return wWW; if(string.IsNullOrEmpty(wWW.error)) { AssetBundle ab = wWW.assetBundle; //将场景存入缓存区 UnityEngine.SceneManagement.SceneManager.LoadScene("Load"); //加载场景 } yield return null; } }