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的代碼,調用會報錯,以上。