天天看點

assetBundle打包腳本與LUA

AssetBundles與腳本

所有Unity的AssetBundle,無論是從本地擷取 還是www,或者打包整個場景。物體上的腳本都不會被編譯。是以AssetBundle打包的時候即使物體上有腳本。導入後其他所有Unity的檔案都不會有問題,唯獨腳本是沒作用的(錯,隻要主程式裡含這個腳本就沒有問題,也就是主程式和AB一起釋出)。那能不能用腳本呢? 答案是,可以!

核心是腳本可以打包進Dll,然後在用戶端用System.Reflection下的Assembly來加載。

步驟:

開發

(1)正常開發

(2)寫一個如txt的文本文檔,說明物體上挂載的腳本

(3)最後釋出前,打包dll,标注dll版本号

(4)打包AssetBundle,标注AssetBundle版本号

用戶端

(1)先下載下傳AssetBundle作為bytes,再儲存到本地

(2)使用AssetBundle.CreateFromMemory加載,再讀取GameObject

(3)下載下傳dll,并根據文檔将 腳本加載到對應的GameObject上

核心代碼:

2.System.Type type = assembly.GetType ("ShowOnGUI"); //根據腳本類名稱ShowOnGUI得到類

3.gameObject.AddComponent(type);//将這個腳本挂在到物體上

注意

System.Reflection的這個做法對端遊和安卓都沒問題。但是違反蘋果的相關規定,iOS可以用LUA。

打包 code -> assembly -> .bytes -> ab

使用 ab -> .bytes -> assembly

部落客說明:AB裡包含的腳本,主程式裡必須有一份,否則下載下傳過來也會在挂腳本的地方出現歎号,而且通過測試,在AB裡加了一個腳本,主程式不更新也沒有用。可能打包時,AB裡隻包含了腳本的名字,一切以主程式裡的

腳本為準。AB打包腳本處理不完美,lua則是為解決這個問題出現的,極像WEB伺服器端的腳本型解釋執行語言,在服務端随時可以修改,立即生效,更新是相當友善。

繼續閱讀