1. 程式人生 > >Unity3D研究院之Assetbundle的使用

Unity3D研究院之Assetbundle的使用

注意:在測試的時候把plateform不要設定成webplayer 這樣你會減少很多麻煩

1.建立Assetbundle

         無論是模型資源還是UI資源,最好是先把他們放在Prefab中,然後在做成Assetbundle。我們以模型來舉例,Assetbundle中可以放一個模型、也可以放多個模型,它是非常靈活了那麼最需要考慮的就是模型空間佔用的問題。

比如我們有兩個完全一樣的模型,但是他們身上繫結的指令碼不一樣,此時需要把這兩個模型放在兩個不同Prefab中。如下圖所示,我們分別對這兩個Prefab打包,我們可以清晰的看到兩個相同的Prefab打包在一起只佔1M空間,而將他們分別打包會佔1 + 1 = 2M空間。 Prefab在打包的同時會把模型身上的所有材質、貼圖、元件、指令碼全部包含進去。

Unity3D研究院之Assetbundle的實戰(六十三) - 雨鬆MOMO程式研究院 - 1

         由此可得相同的模型儘量打包在一起,他們會公用一套資原始檔。不相同的模型儘量分開打包,相同模型具有不同的指令碼、元件的話把他們放在不同的Prefab中,最後把這些Prefab一起打包在一個Assetbundle中。如下圖所示,現在Project檢視中選擇需要打包的Prefab,然後在導航選單欄中選擇Create Assetbundles Main表示分別打包、Create AssetBundles All表示將他們打包在一起。

Unity3D研究院之Assetbundle的實戰(六十三) - 雨鬆MOMO程式研究院 - 2

        這兩個prefab檔案都指向了同一個模型,為了讓它倆有所區別,我給它倆綁定了相同的指令碼,但是指令碼中的引數是不同的。在編輯器上給每個Prefab賦值一個不同的名子,然後在Awake方法中進行輸出。

1 2 3 4 5 6 7 8 9 10 11 12 13 usingUnityEngine; usingSystem.Collections; publicclassScript:MonoBehaviour { publicstringname; voidAwake() { Debug.Log("my name is "+name); } }

Create Assetbundles Main : 分開打包,會生成兩個Assetbundle。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [MenuItem("Custom Editor/Create AssetBunldes Main")] staticvoidCreateAssetBunldesMain() { //獲取在Project檢視中選擇的所有遊戲物件 Object[]SelectedAsset=Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets); //遍歷所有的遊戲物件 foreach(Objectobj inSelectedAsset) { stringsourcePath=AssetDatabase.GetAssetPath(obj); //本地測試:建議最後將Assetbundle放在StreamingAssets資料夾下,如果沒有就建立一個,因為移動平臺下只能讀取這個路徑 //StreamingAssets是隻讀路徑,不能寫入 //伺服器下載:就不需要放在這裡,伺服器上客戶端用www類進行下載。 stringtargetPath=Application.dataPath+"/StreamingAssets/"+obj.name+".assetbundle"; if(BuildPipeline.BuildAssetBundle(obj,null,targetPath,BuildAssetBundleOptions.CollectDependencies)){ Debug.Log(obj.name+"資源打包成功"); } else { Debug.Log(obj.name+"資源打包失敗"); } } //重新整理編輯器 AssetDatabase.Refresh(); }

最核心的方法其實就它:

BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)

引數1:它只能放一個物件,因為我們這裡是分別打包,所以通過迴圈將每個物件分別放在了這裡。

引數2:可以放入一個數組物件。

預設情況下打的包只能在電腦上用,如果要在手機上用就要新增一個引數。

Android上:

BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies,BuildTarget.Android)

IOS上:

BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies,BuildTarget.iPhone)

另外,電腦上和手機上打出來的Assetbundle不能混用,不同平臺只能用自己的。

Create AssetBundles All:將所有物件打包在一個Assetbundle中。

1

相關推薦

Unity3D研究院Assetbundle的原理

        上面MOMO已經將Assetbundle 的使用原理大致介紹了一下 ,我們在談談移動平臺。指令碼不能更新是移動平臺下最大的傷,這就意味著開發者無法繞過App store和 google Play這種線上商店升級應用程式。唯一能做到的就是更新資源、舉個例子,遊戲中在處理版本升級時,一般會有個大

Unity3D研究院Assetbundle的使用

注意:在測試的時候把plateform不要設定成webplayer 這樣你會減少很多麻煩 1.建立Assetbundle          無論是模型資源還是UI資源,最好是先把他們放在Prefab中,然後在做成Assetbundle。我們以模型來舉例,A

Unity3D研究院將UI的點擊事件滲透下去(轉)

一個 響應 http void ons cti ive down point 轉自 http://www.xuanyusong.com/archives/4241 處理UI還有3D模型的點擊推薦使用UGUI的這套事件系統,因為使用起來比較簡潔,不需要自己用代碼來發送射線

Unity3D研究院MAC&Windows跨平臺解析Excel

轉載註明出處:http://www.xuanyusong.com/archives/2429   Excel 和 ICSharpCode.SharpZipLib 是第三方開發包(後面我會附帶下載地址的), 這個兩個東西必須存在。這個開發包是跨平臺的,並且完全獨立不依賴微軟的那一套東

Unity3D研究院MAC&Windows跨平臺解析Excel

Excel 和 ICSharpCode.SharpZipLib 是第三方開發包(後面我會附帶下載地址的), 這個兩個東西必須存在。這個開發包是跨平臺的,並且完全獨立不依賴微軟的那一套東東。即時你的電腦中沒有安裝Excel也同樣是可以很好的解析 通過程式碼來解析U

Unity3D研究院mac上從.ipa中提取unity3D遊戲資源(六十六)

感謝今天某大神(既然是大神名子我當然要保密嘍)告訴我Disunity更新了,不然我還不知道。以前很多人都說用Disunity提取出了Unity3D資源,但是我在Mac上從來沒有成功過,一直在報錯。https://github.com/ata4/disunity/re

轉載 雨鬆MOMO 2014年07月16日 於 雨鬆MOMO程式研究院 發表 Unity3D研究院Time.timeScale、遊戲暫停(七十四)

專案裡面一直在用Time.timeScale來做遊戲的 1倍 2倍整體加速,今天我仔細看了一下Time.timeScale才發現之前我理解錯了一些東西。 Time.timeScale可以控制Update 和LateUpdate 的執行速度,舉個例子說明一下。

Unity3D研究院mac上從.ipa中提取unity3D遊戲資源

http://blog.csdn.net/dl_hum/article/details/28440983 感謝今天某大神(既然是大神名子我當然要保密嘍)告訴我Disunity更新了,不然我還不知道。以前很多人都說用Disunity提取出了Unity3D資源,但是我在Mac上

Unity3D研究院C#使用Socket與HTTP連線伺服器傳輸資料包

最近專案中需要使用HTTP與Socket,把自己這段時間學習的資料整理一下。有關Socket與HTTP的基礎知識MOMO就不贅述拉,不懂得朋友自己谷歌吧。我們專案的需求是在登入的時候使用HTTP請求,遊戲中其它的請求都用Socket請求,比如人物移動同步座標,同步關卡

Unity3D研究院指令碼批量打包渠道包研究

static void GenericBuild(string[] scenes, string target_dir, BuildTarget build_target, BuildOptions build_options)

Unity3D研究院非同步載入遊戲場景與非同步載入遊戲資源進度條(三十一)

          非同步任務相信大家應該不會陌生,那麼本章內容MOMO將帶領大家學習Unity中的一些非同步任務。在同步載入遊戲場景的時候通常會使用方法 Application.LoadLevel(“yourScene”);  這句程式碼執行完畢後程序會幹什麼呢??如下圖所示,這是我隨便找了一個遊戲場景

Unity3D基礎學習AssetBundle 資源包建立與載入

前幾天做了AssentBundle的例子,遇到了問題,在論壇上問了三天都沒人解答,最後在一個朋友的幫助下解決了。下面介紹AssentBundle。 AssetBundles讓你通過WWW類流式載入額外的資源並在執行時例項化它們。AssetBundles通過BuildPipe

Unity3dAssetBundle打包與讀取

一、建立Assetbundle在Unity3D開發的遊戲中,無論模型,音訊,還是圖片等,我們都做成Prefab,然後打包成Assetbundle,方便我們後面的使用,來達到資源的更新。       一個Assetbundle可以打包一個模型(這裡的模型不單單指的是預製模型,可

Unity3d修煉路:遊戲開發中,3d數學知識的練習【1】(不斷更新.......)

turn tor rdo pre 長度 scrip 縮放 unity3d float #pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB :

Unity資源解決方案AssetBundle

保留 裝包 方法 bundle 以及 pipe 用法 遊戲 cnblogs 1、什麽是AssetBundle AssetBundle是Unity pro提供的一種用來存儲資源的文件格式,它可以存儲任意一種Unity引擎能夠識別的資源,如Scene、Mesh、Material

Unity資源打包Assetbundle

nas rar 啟用 大致 ebp 掛載 href 交叉 bundle 本文原創版權歸 csdn janeky 全部。轉載請具體註明原創作者及出處,以示尊重。 作者:janeky 原文:http://blog.csdn.net/janeky/article/detail

Unity3D研究多語言用中文做KEY

一個 階段 txt mon 多語 適合新手 inf 優點 app  做多語言的時候用中文做KEY絕對是有100%的優點,假設用英文表示那麽代碼裏面給文字賦值的地方全都是英文。寫的代碼多了以後維護起來就沒有人能看懂了,或

Unity3d 5.x AssetBundle打包與加載

too sset gre def 同時 adb adas util 推薦 1.AssetBundle打包 unity 5.x版本AssetBundle打包,只需要設置好AssetBundle的名稱後,unity會自動將其打包,無需處理其他,唯獨需要做的是設置好個AssetB

Unity3D — — UGUIRectTransform

unity3 rect com etc unit ans pix gui DPoS Mask.GetComponent<RectTransform>().anchoredPosition(子物體) = hotKey_image.rectTransform.anc

Unity3D引擎高階渲染技術

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!