關於 Unity WebGL 的探索(二)


關於 Unity WebGL 的探索(二)

上一篇博客記錄了關於 WebGL 移植的第一步:部分 C/C++ 插件的編譯,目前項目中的部分插件使用該方法通過,接下來比較大的一部分工作量是網絡模塊 WebSocket 的網絡層實現。

WebSocket.org 網站提供了最近本的 WebSocket 的使用示例,其標准規范定義以及相關的的 API 文檔都比較全,同時支持安全的 wss 協議。

目前主流的瀏覽器都支持 WebSocket,可以在這里 WebSocket.org 測試你的瀏覽器是否支持。

所有的定義和接口都是基於 javascript 的,所以在 Unity 中使用需要創建一份 javascript 的實現,這里可以先參考 Unity 的官方示例:Simple Web Sockets for Unity WebGL。它完整的實現了鏈接的建立,關閉,消息的收發,但是作為簡單的 Demo,健壯性和擴展性肯定是不足的,這里我建議購買使用 Best HTTP,其完整的包裝了 WebSocket,在上層提供了統一簡單的接口,擴展性也很好,健壯性也不錯,基本涵蓋了所有的事件到 C# 端處理。不過需要注意的是,默認的消息數據類型是 arrayBuffer,沒有處理 binary,如果需要的話自己去擴展下,這部分在 Simple Web Sockets for Unity WebGL 可以找到參考,或者閱讀下 API 文檔。

這部分都是基於 Build WebGL 平台的實現,如果想在編輯器下,那么必須有在 C# 端實現的 WebSocket 協議,Best HTTP 自己實現了 C# 端的協議支持,不過你也可以使用 websocket-sharp
,Unity 的 Demo 也使用了這個。

至於如何創建插件以上的示例都有,不贅述。我后來選定的方案是,使用 Best HTTPjavascript 下的 WebSocket 實現 + websocket-sharp

,不完整使用 Best HTTP 的原因是我們項目已有自己的網絡底層實現,只需要在 WebGL 平台替換相應的網絡連接關閉,以及數據的收發即可,所以我進行了剝離,只選取我要的部分進行修改完善。在 C# 端的接口只提供名為 WebSocket 的類,里面處理各個平台即可。

截至以上部分,完整的實現了需要的 WebSocket 網絡支持,接下來只需要在 WebGL 平台下替換項目中的網絡接口即可。

另外,過程中發現了 5.6.1 的一個 Bug:同時開啟 Development BuildUse pre-built Engine 構建出的 WebGL 應用無法正確執行 javascript 插件代碼,會出現類似如下的錯誤:

"An error occured running the Unity content on this page. See your browser JavaScript console for more info. The error was:
ReferenceError: webSocketInstances is not defined"

目前已經給官方提交了 Bug 並得到確認,如果使用的話請注意。

當嘗試完這部分工作后,又得到一個重磅消息:處於某種原因,項目 WebGL 版本移植工作暫停,恢復時間待定。

想說啥來着,一開始不想做可又不得不做,剛有點眉目又不用做了,生活中這種事情其實還不少,只要不要太入戲即可。在寫這篇博客時該工作已經結束了快有一個月了。


免責聲明!

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



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