Unity3D的坑系列:動態加載dll


我現在參與的項目是做MMO手游,目標平台是Android和iOS,iOS平台不能動態加載dll(什么原因找喬布斯去),可以直接忽略,而在Android平台是可以動態加載dll的,有了這個就可以實現代碼更新,不過實際上,在unity里要用上動態加載dll是有很多限制的(不了解的話就是坑)。

限制1:在Android手機里動態加載dll不能使用Assembly.LoadFile(string path),只能使用Assembly.Load(byte[] rawAssembly)這個接口,所以要自己想辦法先讀出來。

限制2:動態加載的腳本不能在編輯器里掛在prefab上。

限制3:如果腳本在動態dll里,調用AddComponent()掛此腳本上prefab上時不能使用AddComponent(“SomeScript”)的方式調用,要用AddComponent(Type.GetType(“SomeScript”))。

限制4:在動態dll里使用[RequireComponent(typeof(SomeScript))]無效,所以不能使用。

我目前主要就是遇到這些坑,以后有什么新發現再進行補充。

 

修正&補充:在iOS下不是都不能動態加載dll,越獄的手機可以實現,具體可參考文章:http://blog.csdn.net/lucky_06/article/details/9093879,親測沒問題。

 

再次修正:iOS實際上還是不能實現真正的代碼熱更新,使用上述方法只能調用外部dll的接口,但執行邏輯還是在native code里面。簡單的說,之前我測試的時候是項目里面有a.dll的代碼,然后再Assembly.Load a.dll進來,調用a.dll里面的方法是可以的,但實際是調用了項目里的代碼,如果項目里沒有a.dll的代碼,調用會報錯,以上。


免責聲明!

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



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