UnityRuntime概念
目前只研究了Android平臺,所以下面講的都是基于Android平臺的
首先說一下UnityRuntime這個概念,幾個月前我也才第一次聽到這個詞的。這個意思是讓Unity做出來的應用能同時在一個平臺上運行。。就像頁游一樣,都在瀏覽器上運行。而UnityRuntime本身也是一個app,起到的作用就類似瀏覽器,可以加載不同的Unity做出來的app并運行。
目的
當然UnityRuntime并不是單純的下載Unity導出的apk,再進行加載運行。這里的apk需要先處理,對apk中的資源進行分組打包放服務端供UnityRuntime下載,這樣就達到減小首包大小的目的。首包可以加一部分資源,其他資源通過靜默下載。還可達到熱更新的目的,apk中的dll也屬于資源的一部分,可以通過下載更新
難點
CocosRuntime比較容易實現(xiàn)主要是因為,Cocos開源,而且Cocos資源都是原始資源,并且有添加資源搜索路徑的接口;而Unity,資源加載路徑除了AssetBundle和部分可以通過WWW從外部加載的資源,其他的Unity加載的資源都通過Unity打包成某種文件格式打包到apk中。。而且Unity又不開源。
所以要實現(xiàn)UnityRuntime一個關鍵的就是要能做到將apk中的資源文件剝離出來,并在Unity搜索該資源文件時將路徑重定向到外部資源實際存儲路徑。
這一步因為apk中的資源很多都跟場景綁定,而且資源文件之間也有著依賴關系,要加載某個場景時,屬于該場景的資源文件都要存在,而且依賴的資源也要存在,加載場景才會完整,所以有時候達到的效果會不理想(首包依賴其他場景的資源文件的時候,就要把依賴的這個場景的資源文件包括依賴鏈都加到首包中,這樣首包就可能還會太大)
這里的首包是UnityRuntime運行游戲前下載的第一個保證游戲可以正常啟動的第一個資源包(其實就是第一個場景在apk中的所有資源文件及依賴的資源文件)
結尾
Runtime其實就是一個Android上的app,Android我不懂,app部分別人負責了。。所以我研究的是Unity部分的,目前已經(jīng)可以達到預想的結果,不過目前穩(wěn)定性還沒有經(jīng)過具體的測試,而且只支持armeabi-v7 32位架構的cpu而已。。還有很多地方需要改進