第一次研究AssetBundles。本次講如何用AssetBundles打包一個資源。又如何加載到場景里。
從最基礎的入手:
首先將下列腳本放到Asset里,什么都不用管,放進去就OK
注意: 代碼中 BuildPipeline.BuildAssetBundle這個方法在高版本中被廢棄了,我用的是5.3.2f1版本還可以用,5.4就不能了。
- using UnityEngine;
- using System.Collections;
-
- using UnityEditor;
-
- public class ExportAssetBundles
- {
-
- [MenuItem("Export / Build AssetBundle From Selection - Track dependencies")]
-
- static void ExportResource()
- {
-
- // Bring up save panel
-
- string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
-
- if (path.Length != 0)
- {
-
- // Build the resource file from the active selection.
-
- Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
-
- BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
-
- Selection.objects = selection;
-
- }
-
- }
-
- [MenuItem("Export / Build AssetBundle From Selection - No dependency tracking")]
-
- static void ExportResourceNoTrack()
- {
-
- // Bring up save panel
-
- string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
-
- if (path.Length != 0)
- {
-
- // Build the resource file from the active selection.
-
- BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, path);
-
- }
-
- }
-
- }
當上面代碼放入項目里時會看到在菜單里有一個Export的東西出現(xiàn),里面有兩項:第一個是選擇打包文件,第二個是打包所有文件。
此文用來講解選擇一個東西打包(一般來說要被打包的東西都是預設prefab)。然后我們新建一個cube在場景里,把他做成預設物體命名為89。
因為window的本地加載都是在StreamingAssets文件里加載的(其他平臺不一樣),所以我們在Asset下手動新建一個StreamingAssets文件夾。
如下圖:
來看一下我們的cube現(xiàn)在的位置:(目的是用來對比一會加載進來的位置,其實位置是不會改變的)
之后就在project里選擇89然后進行打包,選擇路徑(路徑很重要,加載時要用,看下圖)會彈出這個窗口,然后為89命名為666,之后會被保存在StreaningAssets文件夾里。(下圖中由于搜狗輸入法截圖時輸入中文有問題所以只能寫英文了)
打包之后刷新一下unity會在打包的文件里看到剛打包的東西:
至此,我們的打包功能已經(jīng)完成。
..............................................接下來講解如何加載。..........................
以下方法是windows電腦加載的方法(安卓和iOS與PC互相都不一樣):
把下列腳本隨便綁定到一個物體上就OK(該代碼是用來加載物體了)
- using UnityEngine;
-
-
- using System.Collections;
-
-
- using System.IO;
-
-
- public class LoadUnity3d : MonoBehaviour
-
-
- {
-
-
- // Use this for initialization
-
-
- void Start()
-
-
- {
-
-
- StartCoroutine(LoadScene());
-
-
- }
-
-
- // Update is called once per frame
-
-
- void Update()
-
-
- {
-
-
- }
-
-
- IEnumerator LoadScene()
-
-
- {
- //文件路徑,也就是我們打包的那個
-
- WWW www = new WWW("file:///"+ "C:/Users/Desktop/new/New Unity Project/Assets/" + "/StreamingAssets/666.unity3d");
-
-
- yield return www;
-
-
- Instantiate(www.assetBundle.mainAsset);
-
-
- }
-
-
- }
注:要更換文件路徑只能更換"C:/Users/Desktop/new/New Unity Project/Assets/",在window里本地加載必須在StreamingAssets文件里。
之后我們運行unity看到在場景里加載進了一個cube而且位置和之前是一樣的。
本文許多代碼并無優(yōu)化也不嚴謹,目的是為了讓剛接觸AssetBundles的小伙伴能夠更清晰的看到打包實現(xiàn)過程和加載過程。也就是說老司機請繞行!呵呵噠!
|