詳解assetbundle打包
阿新 • • 發佈:2019-02-16
2.新建一個指令碼ExportAssetBundles.cs(程式碼來自官方文件),儲存在Asset/Editor目錄下 1. 2. [MenuItem("Assets/Build AssetBundle From Selection")] 3. static void ExportResourceRGB2() 4. { 5. // 開啟儲存面板,獲得使用者選擇的路徑 6. string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "assetbundle"); 7.
3.選中預設Cube,執行Build AssetBundle From Selection。這時會彈出一個儲存框,將其命名為cube.unity3d(這裡為了測試方便,放在c盤。實際專案中,我們是需要將他們放在web伺服器,供所有客戶端下載更新)
4.新建一個場景scene1.unity,上面放置幾個模型,然後儲存
5.選中該場景,在之前的ExportAssetBundles.cs指令碼中新增打包場景的函式,執行Assets->Build Scene
a.AssetBundle的儲存字尾名可以是assetbundle或者unity3d
b.BuildAssetBundle要根據不同的平臺單獨打包,BuildTarget引數指定平臺,如果不指定,預設的webplayer
· 載入AssetBundle 我們通過一個簡單的程式碼來演示如何載入assetbundle,包括載入普通asset和場景。 1. using System; 2. using UnityEngine; 3. using System.Collections; 4. 5. public class Load: MonoBehaviour 6. { 7. private string BundleURL = "file:///C:/cube.assetbundle"; 8. private string SceneURL = "file:///C:/scene1.unity3d"; 9. 10. void Start() 11. { 12. //BundleURL = "file//"+Application.dataPath+"/cube.assetbundle"; 13. Debug.Log(BundleURL); 14. StartCoroutine(DownloadAssetAndScene()); 15. } 17. IEnumerator DownloadAssetAndScene() 18. { 19. //下載assetbundle,載入Cube 20. using (WWW asset = new WWW(BundleURL)) 21. { 22. yield return asset; 23. AssetBundle bundle = asset.assetBundle; 24. Instantiate(bundle.Load("Cube")); 25. bundle.Unload(false); 26. yield return new WaitForSeconds(5); 27. } 28. //下載場景,載入場景 29. using (WWW scene = new WWW(SceneURL)) 30. { 31. yield return scene; 32. AssetBundle bundle = scene.assetBundle; 33. Application.LoadLevel("scene1"); 34. } 36. } 37. } 注意事項
a.LoadFromCacheOrDownload 可以指定版本,如果本地版本是新的,將不會從伺服器讀取
b.如果是多個資源打包在一起,我們要通過bundle.Load(),載入特定的資源
c.掛載在模型上的指令碼也可以一起打包,但是保證指令碼在原目錄也要存在,否則加載出來無法執行。
· AssetBundle依賴關係 如果一個公共物件被多個物件依賴,我們打包的時候,可以有兩種選取。一種是比較省事的,就是將這個公共物件打包到每個物件中。這樣會有很多弊端:記憶體被浪費了;加入公共物件改變了,每個依賴物件都得重新打包。AssetBundle提供了依賴關係打包。 我們在程式載入的時候必須保證先載入公共物件。否則,只能是在各個物件載入成功後,再通過程式手動新增進來,比較繁瑣。在實際專案中,由於是團隊開發,物件間的依賴關係通常會比較凌亂,最好在開發週期就定好相關的規範約束,方便管理。
· 總結 這一節的內容偏實際操作,官方文件和雨鬆的blog中已經有更加詳細介紹。如果大家還有不明白的地方,可以結合文件再實際操作一下。