0.官方的注意事項
1.不要用nullable
2.盡量不要用foreach,原理限制,有gc。一般嵌套task或者foreach里多次await容易出現代碼執行不到的情況
3.不要用struct,struct在ILRuntime里,如果作為成員變量,性能比class更低。struct不能雙層嵌套(值類型在VM里裝箱,雙層嵌套要兩層尋址,目前無法兩層尋址)
4.熱更里try catch的話,需要取ex.Data["StackTrace"]和ex.Data["Message"]
5.別人的細節匯總,其中有些說法錯誤:
注意!!!第3條是錯誤的,只要把你要多線程同時執行的類型或方法預熱了,然后就可以隨便多線程了
6.顯式實現 和 隱式實現的方法同名時,會執行隱式實現的方法
7.使用ILRuntime遇到的一些問題 - 知乎 (zhihu.com)
8.啟動和關閉協程放在主工程中,參照官方demo
9.發布時在ProjectSetting添加宏DISABLE_ILRUNTIME_DEBUG,可屏蔽來自ILRunTime的Log
10.熱更層中掛在gameObject的繼承MonoBehaviour的腳本上有動畫關鍵幀事件可在MonoBehaviour適配器上添加相應的適配方法
11.若有多個熱更dll,可只用一個Appdomain,只需用命名空間將多個dll生成的clr綁定區分即可
12.ILRunTime熱更層斷點注意事項:
13.用asmdef自動生成的熱更項目文件。
最后還要刪除一個xml設置字段,要不然不能用vs編譯。
14.int[,] float[,] byte[,]這些可以是可以用的,非基礎類型的二維數組不支持,比如Vector2[,]不可以
15.熱更工程需要斷點時,可以先startservice 然后加載 dll 和pdb ,startservice可以用編輯器擴展執行,只要保證Appdmain和運行unity時的是同一個就行
16.sdk類標個[Perserve],打上這個既不會生產冗余綁定撐大內存,也不會被剪裁掉 以備不時之需