今天周五 ,明天沒有什么事情,可以安心寫一些博客。
今天聊 兩個話題
一 , unity熱更新的窘境
二 ,我所使用的unity 熱更新方案JSB
======================================熱更新的窘境=============================================
(1)其實unity 熱更新到瓶頸是 ios 的 系統本身 ,禁止你 jit 。說白了,內存中代碼,系統本身不讓你執行。
安卓 系統,桌面 系統,本身都支持 動態直接替換dll, 熱更新方案 相對較多 一些,我這就不一一列舉啦。
我自己覺得,在ios 跑不起來的熱更新方案 ,都是不過關的熱更新方案,(不服你來打我啊).
=========================== lua============================
現在國內比較流行的 unity 更新方案是lua(ulua http://www.ulua.org/ 和slua http://www.slua.net/), 為什么我只說這兩個呢,以為 其他的lua 解決方案,比如
unilua (https://github.com/xebecnan/UniLua 雲峰大神的c# 實現) ,效率 上比不上 前面兩個(執行引擎用c# 來寫,你覺得會快過c 寫的嗎?況且前面兩位都是靜態綁定,可以完全沒有反射,效率不言而喻)目之所及 是在逐漸的淡出;另外 還有 moon http://www.moonsharp.org/ 也是 c#的lua 實現,效率 問題令人堪憂(不過作者 很有愛,我很喜歡)。
================================L#=============================
說到 熱更新,你還不能不提起 李總的 L# ,真的是奇思妙想的 傑作,(L# 的第一個版本,李總 http://www.cnblogs.com/crazylights 也就用了2天就完成了,大神就是大神),L# 直接內置 c# 版本 dll 的虛擬機。但是有些問題 還靠反射,這在ios 的il2cpp 的 有各種各樣的風險。而且效率本身受到 c# 本身語言的限制,是有瓶頸的。我坦然的說 L# 沒有ulua 和slua快(不服照樣來打我)
==================================JSB=======================
(2)最后,我開始介紹我使用JSB,這里是JSB作者的博客 http://www.cnblogs.com/answerwinner/p/4469021.html。它的骨架是 你離線的 c# 代碼,通過sharpkit(一個c# 轉js的工具),轉成js 腳本,這些js 腳本中 ,會綁定一些你的unity的內部類,然后把這些腳本放到 spidermokey 里面執行,總體來說,你完全可以只寫c# 就可以完全離線更新邏輯。我說一下我為什么要選擇 JSB
原因一,我不想精通第二門語言。我們做游戲客戶端的需要懂得東西很多,你搞unity ,熟悉c# 就可以啦,如果你還要把精力放在 學習lua 和 js 上面的話,你把兩門語言都用熟的時間,為什么不用來學習 3d 圖形學,渲染,shader呢,我的精力是有限的,我不是超人。我不想精通第二們語言( 其實,我本人 java oc lua js php 一般簡單的代碼是沒有問題的,也對一些新興起來的語言比如 rust go 等 懷有很高的興趣),只是說 術業有專攻而已
原因二,效率問題。坦率的講,JSB 沒有lua快,我覺的lua 天生就是做嵌入式腳本的命, 但是spidermonkey的 效率 以為足以支撐 客戶端啦 ,(0.1ms 比 0.2ms 快,嗯 是的,但是用戶感覺不出來),而且 JSB 的整套解決方案中 ,壓根不存在反射,完全的靜態綁定 unity 內部類,所以說,效率問題你放心,原理和 cocos-js 是一樣的。
================================================= 結語 =======================================
我前一個項目用的是lua,我寫起來很蹩腳,我覺得寫大型項目 c# ,比lua 要好一點,純個人見解。我現在用的是JSB,開發效率很高,我一位新同事,c# 學了一兩個月,寫熱更新代碼,無壓力。這就是我的親身實踐,也歡迎你了解jsb ,使用jsb
qq 群:189738580。我們等你奧