Cocos Creator v2.4 更新說明,解鎖更多新功能!

工欲善其事,必先利其器!在長達兩個月的測試後,2.4 版本終於在端午前來了!

在此感謝給予我們寶貴意見和建議的各位小夥伴們,也提前祝大家端午節安康喔!

這個版本中包含了許多新的功能與更新,如資源管理系統重構、Asset Bundle、優化原生上 Label 渲染的性能、優化 Graphic 渲染效果等等。

相信全新的 2.4 版本將會讓大家的工作更加高效、遊戲內容更加豐富、體驗進一步提升,建議所有開發者升級!

以下是 2.4 完整更新說明。爲保證閱讀體驗,[參考鏈接]統一放在文末~

What's new 

支持 Asset Bundle 功能

Asset Bundle 可將工程中的資源按照開發者的意願進行模塊劃分,將不同場景不同需求的資源劃分在多個包中,從而減少首次下載和加載遊戲時所需時間,也可以跨項目複用,用於加載子項目中的 Asset Bundle。

Asset Bundle 還提供了優先級、壓縮類型等相關設置,用於對 Asset Bundle 的包體和加載進行優化。

詳情請參考[Asset Bundle][加載 Asset Bundle]

新增 cc.AssetManager 模塊用於資源管理

Asset Manager 是 Creator 在 v2.4 新推出的資源管理器,其具備加載資源、查找資源、銷燬資源、緩存資源、Asset Bundle 等功能。

Asset Manager 擁有更好的性能、更易用的 API、以及更強的擴展性。

其主要提供了以下幾點新特性:

  • 支持所有資源的加載與預加載,預加載能以更輕量的方式靜默運行,不影響運行效率

  • 支持 Asset Bundle

  • 支持更安全的自動釋放機制,釋放資源時無需考慮其引用情況,避免錯誤釋放資源

  • 支持下載失敗重試、下載優先級、下載併發數等設置,可根據各種情況進行調整

  • 支持更方便地定製加載流程,實現特殊效果

詳情請參考[Asset Manager][動態加載]

增加 Label 的混合選項

支持設置 Lable 的混合選項,可在不同的場景下,使用不同的設置以最大化文本渲染性能。詳情請參考[系統文本的混合模式說明]

原生平臺上使用 FreeType 渲染 Label

  • 提升 Label 初始化速度,Android 提升 5 倍左右,iOS 提升 3 倍

  • 在使用 TTF 字體和 Char 模式時支持 Bold、Outline、Shadow 等效果

支持 Graphic 的抗鋸齒效果

使用 SDF 技術優化 Graphic 的鋸齒問題

支持其他小遊戲平臺的壓縮紋理

編輯器進一步支持更多小遊戲平臺的壓縮紋理限制,只需在 Mini Game 項添加壓縮紋理格式,即可設置包括微信小遊戲、OPPO 小遊戲、vivo 小遊戲等多個平臺的壓縮紋理格式。

完善原生熱更新支持 [#2312]

2.4 進一步完善原生熱更新能力,優化了以下內容:

  • 添加獲取更新包大小接口

  • 對鏈接添加 MD5 參數,對 CDN 更加友好

  • 解決更新過程中斷導致的資源丟失和錯亂的問題

詳細請參考[熱更新範例教程]

新增 SafeArea UI 組件

該組件會將所在節點的佈局適配到異形屏手機的安全區域內,可適配 Android 和 iOS 設備,詳細可查看 [SafeArea 組件參考]

其它新增特性

  • 增加壓縮紋理緩存功能,構建之後將壓縮紋理進行緩存,重複構建時將盡量複用緩存內容,加快構建速度

  • 在 Web 平臺使用 ImageBitmap 加載圖片,提升預覽和 Web 平臺圖片解析速度,減少加載時的卡頓

  • 編輯器屬性面板支持拖拽數組賦值

  • 升級 TypeScript 的版本到 3.9.2

  • 升級原生平臺的 V8 版本到 8.0.426.16

  • 支持導入 GLTF 資源

  • 在所有小遊戲平臺支持首場景分包功能

  • 支持預覽時進行模塊剔除,提升預覽速度,還能更早暴露錯誤的模塊剔除設置

Improvements  

  • 優化 2D 粒子系統 free 和 relative 模式的性能 [#6236]

  • 優化 ToggleContainer 獲取 toggleItems 的效率 [#6569]

  • 提升原生平臺 WebSocket 帶寬 [#2353]

  • SpriteFrame 資源增加 None Trim 類型,可快速設置爲無裁剪

  • 完善 jsb 的代碼提示

  • 支持設置預覽端口

  • 原生桌面平臺構建時可設置窗口大小

Engine  

  • [CORE]修復 cc.easeBackOut 在 time 爲 0 時返回值不正確的問題,[#6728],感謝 chen-gaoyuan

  • [CORE]修復 Node.walk 遍歷錯誤的問題 [#6710]

  • [CORE]修復調用 cc.dynamicAtlasManager.showDebug 報錯的問題 [#6697]

  • [CORE]修復 onLoad 中設置節點的 size 無效的問題 [#6688]

  • [CORE]修復按鈕禁用狀態下的材質將背景材質重置回默認材質的問題 [#6562]

  • [CORE]修復 BMFont 配置數據不存在時的報錯 [#6472]

  • [CORE]修復開啓預乘後,透明度無效的問題 [#6451]

  • [CORE]修復 Camera.render() 渲染兩次的問題,[#6355],感謝 大城小胖

  • [CORE]修復調用 Texture2D.setPremultiplyAlpha 之後圖片翻轉的問題 [#6602]

  • [PARTICLE]修復 2D 粒子系統 relative 模式,節點旋轉時,粒子跟隨的問題 [#6236]

  • [3D]修復 3D Label 在 char 模式下不顯示的問題[#6882]

  • [3D]修復勾選 Enable Auto Batch 選項並切換 Mesh 資源導致渲染錯誤的問題 [#6901]

  • [3D]修復渲染單個 Camera 陰影錯位的問題 [#6477]

  • [3D]修復 effect 中 cc_matProj 錯誤的問題 [#6653]

  • [EDITBOX]修復 number 模式下,EditBox.maxLength 屬性不生效的問題 [#6725]

  • [EDITBOX]修復 EditBox 在 ScrollView 裏滾動時,無法更新位置的問題 [#6634]

  • [TILEDMAP]修復 Tiled Map 渲染順序可能錯誤的問題 [#6284]

  • [TILEDMAP]修復 Tiled Map 隱藏的圖像還是會渲染的問題 [#6309]

  • [SPINE]修復 Spine 紋理使用壓縮紋理後渲染錯誤的問題 [#6483]

  • [SPINE]修復 Spine 貼圖可能渲染錯誤的問題 [#6584]

  • [SPINE]修復貼圖設置爲預乘後,DragonBone 與 Spine 渲染錯誤的問題 [#6696],感謝 大城小胖

  • [DRAGONBONE]修復 DragonBone 在銷燬場景時一直報錯的問題 [#6553]

Native  

  • 修復屏幕翻轉後,節點縮放不正確的問題 [#6689]

  • 修復安卓原生 JniHelper 不是線程安全的問題 [#2457]

  • 修復 unzip 不是線程安全的問題 [#2131],感謝 benloong

  • 修復安卓 EditBox 的完成按鈕被虛擬導航欄遮擋的問題 [#2426]

  • 修復 Spine 節點在 iOS 上無法獲取節點大小的問題 [#273]

  • 修復原生 Effect 中 cc_time 錯誤的問題 [#6586]

  • 修復 iOS 音頻播放可能崩潰的問題 [#2358]

  • 修復節點旋轉計算錯誤的問題 [#2361]

  • 修復設置 Label.string 時編碼錯誤導致崩潰的問題 [#2395]

  • 修復遊戲退出時出現報錯 [#2406]

  • 修復屏幕旋轉後,輸入框會將視圖上推的問題 [#2415]

  • 修復 Spine 3.6.53 版本導出的 JSON 文件裏的路徑動畫解析失敗的問題 [#2413],感謝 laomoi

  • 修復 Android 上重力感應錯誤的問題 [#2231]

  • 修復 Tiled Map 當節點挪動到沒有地塊信息的位置時,不會被渲染的問題 [#2283]

  • 修復原生 WebSocket 接口與 Web 不一致的問題 [#2297]

  • 修復調用 Camera 的 render 方法,會導致 Spine 加速播放的問題 [#258]

  • 修復安卓平臺,剔除 AudioSource 模塊導致 audioEngine 無法使用的問題

  • 修復 Android 9, Android 10 版本號檢測失敗的問題 [#6466]

Web  

  • 修復 iOS Web-Mobile 摘下耳機後音頻無法播放的問題 [#6730]

  • 修復 WebView 透明度在 iOS 上錯誤的問題 [#6717]

  • 修復 iOS 瀏覽器上,輸入中文後,無法再輸入英文的問題 [#6631]

Mini Game  

  • 修復微信小遊戲 WebSocket 發送 Uint8Array 數據報錯的問題 [#115]

  • 修復音頻意外中斷時無法自動恢復播放的問題 [#118]

  • 修復 PC 微信數據開放域無法運行的問題

Editor  

  • 修復 Sprite Editor 保存和還原狀態不對的問題

  • 修復在動畫編輯狀態下,無法重命名不在編輯的動畫剪輯的問題

  • 修復增加 Spine 資源後,編輯器無法識別出來的問題

  • 修復用戶插件重啓後,編輯器可能無法打開的問題

  • 修復多次調用 getNativeAssetPaths 返回值錯誤的問題

  • 修復腳本重命名後加載腳本失敗的問題

  • 修復點擊圖集會出現 width 和 height 報錯的問題

  • 修復使用自動圖集圖片可能失真的問題

  • 修復導入某些圖片導致資源面板錯誤的問題

  • 修復 Prefab 編輯模式無法通過 delete 鍵刪除節點的問題

  • 修復勾選 Filter Unused Resources 在圖集沒有被導出時無效的問題

  • 修復 effect 中定義宏的取值範圍無效的問題 [#6616]

  • 修復動畫編輯器設置 CircleCollider.offset 屬性異常的問題 [#6600]

  • 修復還原上次保存無效的問題

  • 修復設置預覽瀏覽器無效的問題

  • 修復導入 Cocos Studio 工程沒有字體資源的話,會出現報錯的問題

  • 修復多開可能造成編輯器錯誤的問題

Known Issues  

  • 使用遠程 Asset Bundle 並勾選延遲加載時,音頻可能無法播放,請使用 cc.assetManager.postLoadNative 加載後播放。

升級提示  

Cocos Creator 對項目的升級操作是不可逆的,請在升級前提交或備份舊版項目。

絕大多數項目通常都能自動升級,但因爲項目難免存在特殊性,開發者應該根據項目自身需求,提前對新版本引擎進行試用和評估。


此外,出於穩定性考慮,建議即將上線或已上線的項目謹慎升級。

以下是升級說明,如果開發者們在升級中遇到困難,歡迎向我們反饋,我們會盡力協助喔。

從 < 2.4.0 版本升級

  • cc.loader 已經不建議使用,請使用最新的 cc.assetManager 來代替,請參考 [資源管理模塊升級指南]

  • 子包功能已升級爲 Asset Bundle,請參考 [資源分包升級指南]

  • 調整了項目構建後的目錄結構,調整了 BuildResults 的 API,如果你使用了編輯器插件獲取編輯器構建結果,請參考 [定製項目構建流程升級指南]

  • 從 1.10 開始廢棄的 cc.RawAsset 已被正式移除,請使用 cc.Asset 代替。由於 2.4 不再兼容原有 1.x 項目中對 RawAsset 類型的歷史遺留用法,建議所有要升級到 2.4 的項目,特別是從 1.9 版本一路升級上來的項目,先在任意的 1.10 ~ 2.3 版本中對編輯器編譯代碼時輸出的所有警告或報錯都正確處理完畢,再升級到 2.4。

  • cc.Color.fromHex 已被廢棄,請使用 cc.Color.fromHEX 接口

從 < 2.3.3 版本升級

  • Effect 中的 CCTexture2D,CCTexture2DRGB 方法已被廢棄,請改用 CCTexture,CCTextureRGB

  • Vec3.FRONT 已被廢棄,請改用 Vec3.FORWARD

從 < 2.3.0 版本升級

從 2.3.0 開始,定製安卓原生工程時,需注意 Android 與 Android Instant 使用了同一個構建模板。

  • 如果是 Android 平臺單獨使用的代碼請放入 app/src 目錄,  單獨使用的第三方庫請放入 app/libs 目錄。

  • 如果是 Android Instant 單獨使用的代碼和第三方庫請分別放入 game/src, game/libs 目錄。

  • 如果是 Android 和 Android Instant 共用的代碼和第三方庫,請分別放入 proj.android-studio 根目錄底下的  src 目錄和 libs 目錄。

  • proj.android-studio 根目錄底下 jni/CocosAndroid.mk , jni/ CocosApplication.mk,主要用於配置引擎相關的配置,開發者的配置,建議 Android 放到 app/jni/Android.mk 和 app/jni/Application.mk 中,Android Instant 請放入 game/jni/Android.mk 和 game/jni/Application.mk 中。

此外,在 Cocos Creator 編譯 Android 時會默認執行 assembleRelease/Debug,編譯 Android Instant 時會執行 in stant:assembleRelease/Debug。

如自定義了音頻前後臺切換時的暫停邏輯,升級到 2.3.0 後請移除。

目前 Creator 遊戲在所有平臺上前後臺互相切換時,都會在內部自動暫停和恢復音頻。

如果開發者之前有對這一塊進行過定製,監聽並執行了 cc.audioEngine.pause()/resume() 之類的音頻操作,可能會和引擎默認行爲衝突。如果有遇到相關的音頻問題,只需移除相應的定製代碼即可。

從 2.0 - 2.3.0 版本升級

從 2.3.0 開始,Canvas 組件不再負責將 Canvas 節點尺寸設爲屏幕大小,此行爲將結合 Widget 組件實現。爲保證兼容性,2.0 項目升級後,Canvas 所在節點會自動添加 Widget 組件。(從 1.x 項目升級無此問題)

從 < 2.2.0 版本升級

從 2.2.0 開始,我們強化了內存管理機制,現在要求用戶通過代碼動態創建且獨立於場景節點樹的 cc.Node 必須通過 destroy() 釋放,否則引擎無法知道何時回收這類節點的內存,會導致內存泄露。

  • 如原先手動從場景中移除的節點,在不需要用到的時候也需要統一 destroy():

 // 假設 testNode 是場景中的某個節點,若之前被手動移出場景了,如
    testNode.parent = null;
    // 或者
    testNode.removeFromParent(true);
    // 或者
    parentNode.removeChild(testNode);
    // 若往後 testNode 還會再次用到,則無需手動 destroy 該節點
    // 否則應該手動調用
    testNode.destroy();
  • 如原先通過 cc.removeSelf 這個 action 銷燬節點,請改爲使用 cc.destroySelf。

  • 如原先通過 cc.NodePool 管理節點,則不受影響。

從 2.2.0 開始,我們不再建議你使用節點的Skew 功能。

Skew 通常用作在 2D 引擎中模擬 3D 效果,隨着 Cocos Creator 對 3D 節點的深入支持,Skew 效果已經完全可以由 3D 節點來實現。

所以爲了統一使用體驗,進一步優化引擎底層實現,我們廢棄了 Skew 屬性。

不過我們依舊會保留一段時間內的向下兼容,開發者可在舊項目中延續原有做法。後續我們將進一步完善兼容方式和升級案例,擇機正式移除 Skew 功能。

從 < 2.0 版本升級

打開 1.x 項目的話,場景等所有資源將會自動升級,代碼中的廢棄接口從 2.3.3 開始將會在保持兼容的基礎上同步輸出報錯。

升級方式可參考[1.10 資源升級指南][2.0 升級文檔]進行調整。

答疑  

3D 項目應該用 Creator 2.x 還是 Creator 3D?

隨着 Creator 2.x 對 3D 的支持越來越完善,以及 Creator 3D 自身的發展也越來越成熟,我們也遇到了不少開發者在立 3D 項目時的疑問:既然 Creator 2.x 和 Creator 3D 版都支持 3D,那麼我應該選擇哪一個引擎?

在這裏我們順便統一解答下:

1. 如果需要集成 TiledMap、Box2D 或者 Spine,或者想要更穩定和高性能的 UI/2D 表現,或者想要發佈到原生平臺,暫時只能用 Creator 2.x。

2. 如果 3D 場景特別多或者特別大,或者有骨骼動畫融合、換裝、過渡等表現需求,或者需要更高級別的渲染能力,只能用 Creator 3D。

3. 簡而言之,如果是 2.5D 項目,通常採用 Creator 2.x;如果是純 3D 的輕度項目,一般兩個引擎都能勝任;如果是 3D 重度項目,通常採用 Creator 3D。

當然,以上判斷標準並不是絕對的,我們也遇到能力強的開發者在 2.x 上實現了大地形及次世代效果,甚至從 3D 往 2D 移植了 GPU 粒子、GPU Instancing、GPU 骨骼動畫等功能。

開發者可以在立項前期對兩個引擎進行充分的技術預研、壓力測試,結合團隊自身實際情況進行選擇。

 

上就是本次更新的內容,戳“閱讀原文”前往官網下載更新喔。大家有任何意見或建議,可以通過留言、社區等渠道向我們反饋喔!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章