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上

核心代碼:

1.assembly=Assembly.Load (m_WWW.bytes);//從服務器上讀取dll,作為assembly。中間可以加bytes的本地保存

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

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

注意

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

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

使用 ab -> .bytes -> assembly

源自:http://www.siluyouxi.com/game/code/u3d/1494.html

 

 

博主說明:AB里包含的腳本,主程序里必須有一份,否則下載過來也會在掛腳本的地方出現嘆號,而且通過測試,在AB里加了一個腳本,主程序不更新也沒有用。可能打包時,AB里只包含了腳本的名字,一切以主程序里的

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM