參考
快過年了,分享一個平臺判斷的代碼
構(gòu)建時常量
官方文檔 跨平臺發(fā)布游戲
CocosCreator小游戲項目的遠程資源管理總結(jié)
Creator+微信小游戲(2):服務(wù)器遠程加載資源(4M限制、socketio問題)
Cocos Creator踩坑篇:微信小游戲?qū)①Y源放到遠程服務(wù)器并加載的完整流程
一闹瞧、發(fā)布微信小游戲
1.根據(jù)微信官方文檔注冊小游戲賬號
如果只能看到小程序苹支,看不到小游戲寞焙。需要根據(jù)指引填寫信息和提交相應(yīng)的資料锅移,服務(wù)類目應(yīng)選擇“游戲”吕粗,子類目可以先選擇“休閑游戲”纺荧,就可以擁有自己的小游戲帳號。
2.根據(jù)COCOS官方文檔發(fā)布微信小游戲
這里注意發(fā)布面板填上自己的appid
3.使用微信開發(fā)者工具溯泣,選項目->導(dǎo)入虐秋,就能看到自己的小游戲了。
4.真機調(diào)試報錯
小游戲打包超過4M太正常了垃沦。常規(guī)做法是把res目錄(游戲資源)放到遠程服務(wù)器客给,小游戲啟動的時候自動去服務(wù)器下載資源。
如果要想正常發(fā)布你的小游戲肢簿,你必須把資源必須放在具有https域名的服務(wù)器里靶剑。。
所以你需要:
1池充、買個ECS服務(wù)器桩引,供應(yīng)商沒限制;
2收夸、買個域名坑匠,幾十塊錢一年也還行。
3卧惜、https認證厘灼。這個也有免費的夹纫。
4、域名備案设凹。這個也不要錢舰讹,就是手續(xù)比較麻煩。
當然闪朱,如果你的小游戲只是自己的微信號預(yù)覽調(diào)試月匣,使用http也可以湊合下。
二奋姿、把資源放到遠程服務(wù)器
1.本地測試锄开,使用anywhere弄個http服務(wù)器
npm install anywhere -g
比如在D:\CocosProject\remoteDir
中使用anywhere -p 8090 -s
啟動服務(wù)器。
2.項目參考官方示例Step By Mind称诗,只使用了cocos包下的模型
3.將cocos文件夾設(shè)置:目標平臺微信小游戲院刁,勾選配置為遠程包
4.打包時,填上我們測試用的http服務(wù)器
5.打包完成后檢查build/wechatgame路徑
和之前相比粪狼,打包多出來一個remote文件夾,將此文件夾剪切到D:\CocosProject\remoteDir
即可任岸。
重新運行再榄,發(fā)現(xiàn)可以正常游戲。但是享潜,真機調(diào)試仍然報錯超過4M困鸥。
經(jīng)過檢查,JS包接近4M
main主包仍然接近4M
這是因為我們的主場景就加載了cocos模型剑按。
參考官方文檔 Asset Bundle 介紹
項目中除了自定義的 Asset Bundle 外疾就,Creator 還有內(nèi)置的 3 個 Asset Bundle。與其他自定義 Asset Bundle 一樣艺蝴,內(nèi)置 Asset Bundle 也可以根據(jù)不同平臺進行配置猬腰。
- main 存放所有在 構(gòu)建發(fā)布 面板的 參與構(gòu)建場景 中勾選的場景以及其依賴資源 (通過配置 構(gòu)建發(fā)布 面板的 主包壓縮類型 和 配置主包為遠程包 兩項)
- resources 存放 resources 目錄下的所有資源以及其依賴資源 (通過配置 資源管理器 中的 assets -> resources 文件夾)
- start-scene 如果在 構(gòu)建發(fā)布 面板中勾選了 初始場景分包,則首場景將會被構(gòu)建到 start-scene 中猜敢。 (無法進行配置)
6.把首場景做成加載scene姑荷,就放個進度條。在首場景中加載cocos模型的prefab缩擂。
這里打包后鼠冕,仍然發(fā)現(xiàn)main bundle有4M左右,經(jīng)過檢查胯盯,還是有cocos模型文件懈费。看起來和bundle的優(yōu)先級有關(guān)博脑,因為main bundle是參與構(gòu)建場景的資源憎乙,而我們的mainscene使用了cocos模型票罐。所以cocos bundle包的優(yōu)先級就需要比main bundle的優(yōu)先級7更高。cocos bunlde設(shè)置為10之后寨闹,重新打包胶坠,可以發(fā)現(xiàn)main bundle終于變小了。
這個在 oppo小游戲遠程服務(wù)器的回復(fù)中也能看到:
bundle是有優(yōu)先級的繁堡,要想打到bundle里不打主包里沈善,bundle的優(yōu)先級至少設(shè)置成8
7.將remote文件夾剪切到D:\CocosProject\remoteDir
,使用微信開發(fā)者工具重新打開
有類似
downloadFile:fail createDownloadTask:fail url not in domain list
的報錯椭蹄。參考微信 官方文檔闻牡,勾上這個即可解決:
現(xiàn)在終于能看到游戲了,遠程加載資源如下
不過真機調(diào)試還是超了一點:
8.分離引擎
游戲引擎插件是微信 7.0.7 版本新增的一項功能绳矩。此插件內(nèi)置了 Cocos Creator 引擎的官方版本罩润,若玩家首次體驗的游戲中啟用了此插件,則所有同樣啟用此插件的游戲翼馆,都無需再次下載 Cocos Creator 引擎割以,只需直接使用公共插件庫中的相同版本引擎,或者增量更新引擎即可应媚。
例如严沥,當一個玩家玩過了由 Cocos Creator v2.2.0 開發(fā)的 A 游戲,里面已啟用了此插件中姜。然后他又玩了同樣是 v2.2.0 開發(fā)的 B 游戲消玄,如果 B 游戲也啟用了此插件,那么就無需重新下載 Cocos Creator 引擎丢胚。即使 B 游戲使用的是 v2.2.1 的 Cocos Creator翩瓜,微信也只需要增量更新引擎兩個版本的差異部分。這樣就可以大幅減少小游戲的下載量携龟,提升小游戲啟動速度 0.5 ~ 2s兔跌,獲得更好的用戶體驗。
參考3.0裁剪模塊后骨宠,導(dǎo)出微信小游戲仍然有所有模塊浮定,是哪里沒操作對?
作者表示在項目中剔除了許多功能层亿,但是打包后桦卒,引擎模塊都在。
微信引擎分離插件在線上只有一份匿又,只有兩份插件代碼一致才能做到復(fù)用方灾,因而勾選后包內(nèi)會有帶有完整的引擎包。希望減少包體的話不應(yīng)該勾選此選項。
Q:引擎插件功能是否支持自定義引擎裕偿?
A:不支持洞慎,構(gòu)建時如果版本不匹配或者啟用了自定義引擎,雖然編輯器在出現(xiàn)報錯后會繼續(xù)構(gòu)建嘿棘,但是構(gòu)建生成的包實際上無法正常使用引擎插件劲腿。
Q:項目開啟了引擎的模塊裁剪,要使用引擎插件的話需要還原為完整版引擎嗎鸟妙?
A:無需修改焦人,項目可以按原來的方式繼續(xù)裁剪引擎。引擎插件提供的是完整版引擎重父,能兼容所有的裁剪設(shè)置花椭,不會影響原有項目的包體。
Q:啟用引擎插件后房午,是否仍然會把引擎代碼算入首包包體中矿辽?
A:根據(jù)微信的規(guī)則,目前仍然會計算在內(nèi)郭厌。
Q:開啟引擎插件后袋倔,是否可以在編輯器主菜單中的 項目 -> 項目設(shè)置 -> 功能裁剪 中移除所有模塊,減小包體折柠?
A:不可以奕污,因為微信從 7.0.7 開始才支持引擎插件,如隨意裁剪引擎可能導(dǎo)致游戲無法在低版本微信上運行液走。
Q:啟用引擎插件后,在微信開發(fā)工具中提示 “代碼包解包失敗” 或者 “..., 登錄用戶不是該小程序的開發(fā)者”贾陷,但真機預(yù)覽正常缘眶?
A:構(gòu)建面板中默認的 appid 為通用測試 id。根據(jù)微信的規(guī)則髓废,如需測試引擎分離功能巷懈,需要開發(fā)者在構(gòu)建面板中填入自己開通的 appid。
Q:啟用引擎插件后慌洪,在微信開發(fā)工具中提示 “插件未授權(quán)使用 添加插件”顶燕?
A:點擊提示中的 添加插件,選擇添加 CocosCreator 插件后重新編譯即可冈爹。若添加插件時出現(xiàn)“可添加的插件信息為空”的提示涌攻,可嘗試在微信開發(fā)者工具中選擇 清緩存 -> 全部清除 后重試。
9.ammo.js的fallback 模式
使用 fallback 模式時频伤,編輯器會打包 wasm 和 js 模式的代碼恳谎,兩個模式對應(yīng)的代碼包體分別為 1.2MB 和 0.7MB,總共接近 2MB,這對主包 4MB 的限制影響很大因痛。解決辦法是通過配置子包來減輕主包的壓力婚苹,這里以 ammo-82499473.js 文件為例,操作步驟參考官方文檔鸵膏。
本案例使用了物理效果膊升,暫時使用js模式。最終打出的主包是3.5M左右谭企。
10.安卓手機兼容性
我的榮耀手機真機調(diào)試提示:該頁面不存在 你可以進入null首頁獲取更多服務(wù)
別的安卓手機可以
三廓译、其他打包選項
1.MD5緩存
MD5 cache。點上這個以后赞咙,每次發(fā)布生成的資源名都會加上md5碼责循,你可以理解為每次發(fā)布后文件名都變了,這是為了避開瀏覽器緩存資源攀操。當然砸出的坑就是每次發(fā)布后你都要同步更新服務(wù)器資源院仿。
2.主包壓縮類型
https://forum.cocos.org/t/topic/114798/17
經(jīng)過反復(fù)試驗,發(fā)現(xiàn) 分包這部分的文檔 沒有說明要在構(gòu)建項目的時候選擇 主包壓縮類型為小游戲分包
3.配置主包為遠程包
該項為可選項速和,需要與 資源服務(wù)器地址 選項配合使用歹垫。 勾選后,主包會配置為遠程包颠放,并且與其相關(guān)依賴資源一起被構(gòu)建到發(fā)布包目錄 remote 下的 內(nèi)置 Asset Bundle — main 中排惨。開發(fā)者需要將整個 remote 文件夾上傳到遠程服務(wù)器。
這里我的main主包只有幾張加載頁面碰凶,大小只有幾十K暮芭。當然放遠程包,也能節(jié)省出來一點點空間欲低,沒太大必要辕宏。
4.自動圖集
自動圖集資源 (Auto Atlas)
自動圖集資源 目前是以當前文件夾下的所有 SpriteFrame 作為碎圖資源,然后在構(gòu)建過程中將其打包成一個大的 Sprite Atlas砾莱。
在游戲中使用多張圖片合成的圖集作為美術(shù)資源瑞筐,有以下優(yōu)勢:
- 合成圖集時會去除每張圖片周圍的空白區(qū)域,加上可以在整體上實施各種優(yōu)化算法腊瑟,合成圖集后可以大大減少游戲包體和內(nèi)存占用
- 多個 Sprite 如果渲染的是來自同一張圖集的圖片時聚假,這些 Sprite 可以使用同一個渲染批次來處理,大大減少 CPU 的運算時間闰非,提高運行效率膘格。
這里經(jīng)過測試闯袒,如果一個bundle文件夾出現(xiàn)了自動圖集,則打包出來的資源會有合圖和碎圖兩份資源,相當于包體變大了政敢。官方給出的解釋是:
放在bundle文件夾下其徙,默認每個資源都可能被動態(tài)加載,都會打包喷户。放在普通文件夾內(nèi)的資源都是只有被使用才會被打包唾那。 官方會在3.1.0版本中對此進行優(yōu)化。
參考Cocos Creator 3.1 攜多線程渲染架構(gòu)和 PhysX 物理支持強勢登場
自動圖集面板新增針對 Bundle 內(nèi)使用自動圖集的優(yōu)化選項褪尝,共增加三個選項闹获,用于自動圖集在 Bundle 內(nèi)時的一些不必須信息剔除,優(yōu)化包體
優(yōu)化自動圖集被多個 Bundle 引用導(dǎo)致圖片被復(fù)制的問題河哑,減少包體
但是我在3.1版本中經(jīng)過測試避诽,把這幾個選項勾上,仍然會把合圖和碎圖都打包出來璃谨。
當我把Bundle優(yōu)先級設(shè)置為1時沙庐,合圖會出現(xiàn)在main包里。當優(yōu)先級設(shè)置為10時佳吞,合圖和碎圖都會出現(xiàn)在bundle中拱雏。
四、微信小游戲要求圖片尺寸在2048以下
參考
小游戲中圖片對尺寸限制在2048像素底扳,長寬要小于等于2048像素
能不能有種像Unity那樣指定圖片最大尺寸的功能铸抑?
微信小游戲創(chuàng)建image對象,大小不能超過2048像素
參考
Creator 2.4.5 構(gòu)建微信分包衷模,微信開發(fā)工具真機調(diào)試報錯:not node js file
loadBundle 就會報錯鹊汛,但不影響游戲運行
cc.assetManager.loadBundle(‘bundle-name’, (err, bundle) => {
if (err) {
return console.error(err)
}
cc.log([Bundle 加載])
})