unity熱更新是一個經久不衰的話題。除了最多見的lua以外,還有如JSBinding,C#等等。這裏介紹一個使用ECMAScript4進行熱更新的方案。它吸取了各家的優勢,特點很鮮明。git
https://github.com/asheigithub/apple-juice-actionscriptgithub
ECMAScript4事實上並無正式推出,瀏覽器的ES標準是從ES3直接跳到ES5,如今是ES6.這其中夾雜大量政治因素,具體能夠去百度。瀏覽器
但不管如何ECMAScript4 是完整支持類型,接口,繼承,編譯期類型檢查的強類型腳本語言,同時又支持動態屬性訪問,原型鏈繼承等,同時有IDE支持,很是適合較大規模的項目開發。app
事實上ECMAScript4的惟一實現,就是ActonScript3。ide
這是一個用純.net2.0實現的ActionScript3編譯器和虛擬機。它只使用了.net2.0的語法,所以能夠在任何提供.net2.0執行環境的地方運行腳本。即便環境不提供JIT功能(例如Unity在IOS上,或者IL2CPP打包的安卓系統上)也一樣不受影響。性能
熱更新項目提供了一個Unity插件包和一個SDK文件夾。插件包導入Unity工程後,能夠在菜單內建立腳本工程,會自動設置好各類路徑,若是沒有安裝IDE,使用bat批處理文件也能夠編譯代碼發佈到Unity來體驗。測試
它和其餘熱更新方案相比,主要有如下一些特色:優化
1. 包括完整的編譯器和虛擬機。其餘熱更新方案,大可能是嵌入某個第三方語言運行時(例如LUA),這個則不須要。它所有以代碼提供,整個虛擬機都是代碼,直接導入Unity便可執行.ui
2. 語法友好,純ECMAScript4語法,當JS用便可。同時有完整的面向對象以及IDE支持。lua
3. 編譯器爲Unity優化語法。能夠直接在腳本內編寫Unity協程。
4. 編譯器爲Unity的Monobehaviour優化,能夠直接在腳本中定義Monobehaviour,並掛載。
5. 對.net結構體有特殊優化,在腳本內使用結構體時,只要不保存到堆中,即不會產生任何GC。
6. 對.net對象有特殊優化。在腳本內建立.net類庫的對象時,只要不保存到腳本對象中,就不會產生額外的對象分配。
7. 支持操做符重載。unity中有許多操做符重載。例如Vector3的+-*/等。這些操做符重載在腳本中一樣能夠直接使用。
8. 能夠在腳本中繼承.net的類型。並且還能夠用腳原本override .net基類的虛方法。
9. 將unity的類型導出到腳本中做爲API的步驟是全自動進行的。並且導出後的API還一樣保持了繼承關係。
實際開發環境截圖:
如圖,能夠看到腳本中直接繼承了MonoBehaviour。 IDE提供了GameObject的各類靜態方法的智能感知。API提示明確顯示了原 Unity C# API的簽名等。
官網上有一個和slua的對比。
https://asheigithub.github.io/apple-juice-actionscript/doc_cn/2-4-0-slua-applejuice-2018-04-12/
Unity交互部分性能大體至關,某些地方略勝lua。測試環境均爲沒法jit的il2cpp打包手機環境實測。測試手機爲魅藍NOTE5
使用前先確認安裝以下環境:
從官網下載最新的發佈包。
並解壓。
解壓後包括SDK文件夾一個,Unity插件包一個。
項目建立步驟:
1. 先建立一個Unity工程。而後導入UnityPackage內的Unity插件包。
2. 點擊菜單 ASRuntime/Create ActionScript3 FlashDevelop HotFixProj。
3. 根據提示先定位SDK的位置。
4. 而後根據提示建立AS3熱更新項目。項目建立完成後,會根據默認配置生成Unity的API。
腳本項目要求建立在一個空白的文件夾中。
項目測試:
1. 在Unity工程中,打開測試場景"Assets/HotFixDemoScene1.scene"。
2. 在剛纔生成的ActionScript3工程目錄中,用FlashDevelop打開<protname>.as3proj 工程文件。
3. 在AS3工程中修改代碼
4. 點擊FlashDevelop的編譯按鈕,進行編譯
5. 回到Unity工程,點擊播放,便可看到修改的結果。
下面有一個gif動態圖,演示了從建立項目到熱更的過程。gif文件有9M,若是不顯示請稍待
最後,我作了一個熱更新的修改DEMO:將Unity引導內的 roll-a-ball修改成使用腳本驅動的熱更新版本。而且修改部分代碼,以支持手機上的重力感應操做。能夠用il2cpp打包到安卓手機上查看效果。
下載連接: https://files.cnblogs.com/files/ashei/rollaball.zip
更多關於此項目的使用方法,能夠去官網查看文檔。歡迎你們提出意見或建議。