最近在接觸unity的WebGL平台,其實這個平台作為Web Player的替代品,已經能滿足大部分的開發需求,而且不需要額外的插件支持,確實方便了不少,但開發中依舊遇到了不少問題,在這里記錄和共享一下解決方法。
首先還是構建選項,在"Player Settings"里。
Resolution and Presentation和老的web player沒啥變化,你可以把你自制的模板放到
"\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates"目錄里面,具體用法以后慢慢填坑。
other settings,其他設置中,和其他平台有些不一樣,值得注意的是這個"Strip Engine Code",剝離引擎代碼的選項。
官方文檔是這樣描述它的"如果被選中,unity會默認剝離在項目中不會使用的組件",也就是說,假如你的項目中沒有音頻功能,unity會在封裝的時候去掉這部分代碼以減少大小。
乍一聽感覺,哎喲,不錯哦!其實unity默認也是勾選這個選項的,但是如果你的項目中使用到了資源包"AssetBundles"進行動態加載,就有可能掉進坑里。
因為代碼被剝離了,到時候在網頁上一跑,F12打開調試就能看到滿面紅光。
這時候有2個辦法,一個是在工程文件目錄中,建一個link.xml文件,內容如下
"UnityEngine.Collider"就是要引用的class,引用其他的UnityEngine.UI....以此類推
點擊這里,轉到官方link.xml的解釋文檔
<linker> <assembly fullname="UnityEngine"> <type fullname="UnityEngine.Collider" preserve="all"/> </assembly> </linker>
將文件保存到unity工程的Assets文件夾中
第二個方法是干脆去掉剝離代碼的選項,構建體積會有所增大,但如果上面方法沒能解決問題,這或許是最后的辦法。
接着來到"publishing settings",發布設置,在我當前版本unity5.4中,只留下了三個選項
第一個是webgl可用內存大小的分配,單位是MB,如果太小運行一陣子會出現內存溢出的錯誤警告,設置太多也不合適,內存吃緊的機器上估計就gameover了
個人建議在"64-512"之間,默認的是256,其實簡單的項目已經足夠使用了,這里設置的值在封裝以后也可以在index.html文件中修改,具體位置位於頁面底部的<script>標簽中
單位是字節(b),因為webgl構建速度很慢,如果要對這個參數進行調整,可以直接修改頁面,省去了大把人參。
<script type='text/javascript'> var Module = { TOTAL_MEMORY: 268435456, //這個就是可用內存大小 errorhandler: null, compatibilitycheck: null, dataUrl: "/Release/..", codeUrl: "/Release/..", memUrl: "/Release/..", }; </script>
第二個參數"Enable Exceptions",也就是異常捕獲的一個開關,調試期間可以打開,最終產品發布的時候需要去掉。
共有三個選項
none:關閉
Explicitly Thrown Exceptions Only:也就是默認選項,只處理腳本中throw部分的代碼,同時也會增大代碼體積。
Full:顧名思義,會捕獲所有的調試信息,官方文檔說,除了代碼中的throw,還會將空的引用,非法索引數組,堆棧信息一同捕獲。
至此,已經簡單介紹了一下發布設置的一些細節,關於webgl,由於國內文檔較少,我也會繼續拋磚引玉,有更好的想法歡迎留言交流。