干掉Unity3D


我為什么想干掉Unity3D?

這個問題容我不答,每個做技術的人總有一些完美主義。

你使用u3d的過程中是不是痛並快樂着呢。

就從兩個國內具有相當普遍性的痛點說起。

  1. il2cpp,unity作出了這個決策以來,導致每個程序員都擁有了大姨媽,每當接入ios平台,就得再死上一次。每當看一眼打出來的包的容量,就會有一種壓力山大的感覺。
  2. unity的底層c++ api沒有公開,如果想要接入腳本層,只能通過dotnet進行互操作,導致u3d平台上難以實現比較完美的腳本方案。首先性能就是一個問題

還有第三個痛點,一直是我的一塊心病。Unity不能在手機平台斷點調試,本來斷點調試作為程序員的最后手段,居然被剝奪了。很是擔憂。

痛點這么多,還一直賴在Unity3D,又是為什么呢

因為unity3d還有一些優點,太過於吸引人。

  1. 成熟、穩定(穩定要打個折扣)的IDE
  2. 多平台一鍵發布(IOS這個一鍵也差了一點,是發布為xcode項目)
  3. C#語言buf加持

有沒有可能解決痛點,保持優勢?

當然有

讓我們看一下unity3d的架構,這是個我隨便畫的示意圖

Unity3d的架構是以c++編寫的引擎框架為基礎,這里很傳統。

反傳統之處在於unity3d完全將所有的接口置於monoruntime之后,unity本身的部分功能也是由dotnet開發,比如unityengine.ui

用戶代碼更是完全限制為使用dotnet開發。

雖然unity提供了plugin機制,可以用其他語言混編,但是這些插件均無法訪問unity底層c++代碼(或許可以,我沒有見到任何資料)。

這導致了unity無法高效的接入c++實現的腳本語言,lua在unity的實際表現有目共睹。

這是痛點2的原因,痛點1是unity自己作死,不多說。痛點3也是unity工作沒有做好。

解決痛點

有沒有一個架構,可以解決痛點123呢,答案是有。

基於xamarin方案,android、ios平台均可斷點調試

底層代碼同時對monoruntime和腳本層公開接口,可以插入c++實現的各種腳本,比如lua,並取得原生性能。

用戶代碼分為dotnet 和 腳本兩種,兩者之間不互訪,通過底層接口互發消息。

Il2cpp自然也不用擔心。

還有附加的好處,c# 5.0走起。

Xamarin平台上現有monogame,他是都在monoruntime之后實現的,調用otk,也不能提供原生性能,也不可以插入原生腳本。

該方案實現在於:

  1. 為xamarin編寫不同平台的原生插件,主要是繪圖、音效、觸摸、鍵盤這些底層公開接口。主要是ios、android、當然pc也要,pc可以不用xamarin,改為windows+vs,這樣在windows調試更給力。
  2. P/invoke導出到dotnet,對接什么腳本層也做對應導出。

這樣重度用戶代碼用dotnet編寫,輕度易變代碼用腳本編寫,輕度代碼為資源,任何平台均可實現下載執行。

保持優勢

  1. c#加持,更優了,unity整合c# 3.5,xarmarin整合c# 5.0,你還想說什么。
  2. 多平台一鍵發布,這個xamarin沒有做,需要我們自己做。
  3. 成熟穩定的場景編輯器,這個需要我們自己做。

場編怎么做,抄襲unityeditor,unityeditor這個腳本擴展比較方便,抄。

一鍵發布怎么做。在android很容易,我們已經做了原理測試程序,弄個模板apk文件,解包,把資源放進去,再重新打包簽名,已經完全實現了。

Android上面的dotnet用戶代碼我們也一鍵編譯成dll當資源放了進去,因為android上monoruntime用的jit,很容易實現。

在ios一鍵發布要麻煩一點,需要用monoaot 將dotnet用戶代碼編譯為.a,再用模板包重簽名。說實話aot弄成.a 我不知道怎么弄。Ipa重簽名我也不知道怎么弄。

但是aot弄成.a,我們可以找到unity源碼學習,我們可以找暢游的引擎源碼學習。Ipa重簽名,國內一把越獄平台都有這功能,還有個著名的軟件iresign,我們去找他的源碼學習。至少我們知道方向在哪里。

實現了一鍵發布,我們還讓發布階段不依賴xamarin了,xamarin僅需要出模板包。

這樣也可以幫用戶節省一個xamarin授權的費用。

 

這就是新FB引擎想去的方向。

如果你想支持贊助我們的工作

用支付寶:

lightsever@hotmail.com

李劍英

 

如果你是想要加入討論

QQ群:223823428

 


免責聲明!

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



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