Cocos Creator v3.5 Released

Hi, all dear community developers

Since v3.5, we will sync public beta version in github and our English and Chinese forum. We have been working very hard on v3.5, and it’s going to be a very important version targeting stability and user experience.

About open source repository

Since v3.5, we have merged our engine repositories, it’s a first step to be much more open and active in the community.

  1. Engine repo cocos-creator/engine have been transferred to cocos/cocos-engine.
  2. Native engine repo cocos-creator/engine-native have been completely merged into native folder of cocos-engine repo, it will unify the development workflow for both engine team and outside developers.
  3. Since now, we will be more open by maintaining public issues and public projects
  4. It’s an ongoing process and it will take us a while to make all future plans visible to public, all new tasks will be created in public repo and tracked in projects. As a lot of planned tasks in recent versions like v3.5 and v3.6 have been tracked in our private repo, it’s hard to move everything, but you can expect a fully visible plan for v3.7.
  5. We strongly encourage our internal developers and Chinese community to also use English in the issue tracker so that the whole world can participate seamlessly.


Important updates

Marionette animation system

We added Marionette animation system in v3.4 for complex character animation. It supports state machine editing and weighted blending. In v3.5, we added several crucial new features to Marionette animation system, layer and skeleton mask are most important updates because they allow developer to separate animation blending for different parts of character.


Improvement for 2D only project

For 2D users and 2D project, we have improved the user experience in editor, it’s been a very popular request for 2.x users when they consider to upgrade. We have progressively improved things and will continue to do so, in v3.5, you can see the following changes:

  1. All scene created in 2D projects will only contain a default canvas and a 2D camera (ortho projection)
  2. The scene view is in 2D mode by default
  3. Some inspector is adjusted for 2D editing
  4. All 3D modules are not selected by default, and there won’t be 3D features in component addition panel and node creation panel
  5. If you want 3D features back, you can just select 3D modules back in project settings

Frame Pacing Library (Swappy)

For quite a while, we have been working with Google to bring better Android development experience to our developer, we are proud to announce Frame Pacing Library have been integrated into v3.5. It’s part of Android Game Development Kit (AGDK), it helps OpenGL and Vulkan games achieve smooth rendering and correct frame pacing on Android. You can activate Frame Pacing in Android build panel.

Geometry Renderer

A new simple geometry render api is introduced in v3.5, it’s designed for simple debug rendering using prebuilt primitive geometry types. It supports lines, boxes, spheres, polygons etc, you can draw them in wireframe or in solid mesh. All drawing geometries are in world space with a configurable transform. Furthermore, some geometries can be affected by real time lighting.

Detailed functionalities are shown in the following chart.

Material editing improvement

In the past versions, we have put a lot of effort on visual effect upgrade, meanwhile we have also started to invest in improving the DCC workflow. We are starting to ship some improvements in v3.5.0, and you will see much more coming in future releases. Here are what you can expect in this version:

  1. You will no longer need to dump material and modify it in the new one, you can directly modify the imported material of FBX/GLTF.
  2. While you edit the material, you can now use undo / redo to reverse or rewind actions. ![|464x714px]
  3. When switching Effects during editing, the same properties (e.g. ‘mainTexture’) will be cached and retained.

Flatten tool in terrain editor

Terrain editor now have new brush modes Flatten and SetHeight with a height parameter. It’s for easier sculpting fixed height planes in terrain editor.


Platform Abstraction Layer

In v3.5 we assembled all platform related low level adaptations into Platform Abstraction Layer, including system info, window adaptation, audio, input, etc. The distribution of system level events are also unified. This is a low level refactorization, developer level API haven’t been affected, but it will allow Cocos to adapt to new environments easier than ever.

Various performance optimization

We continue to improve performance in v3.5, here are the most visible ones.

  1. The performance of spine and dragonbones on native platforms have been improved by reusing the same buffers between native and JS instead of copying them in previous version.
  2. Optimized memory occupation of RealCurve, CurveRange.
  3. Optimized decorator performance for particle system instantiation.
  4. Improved WebSocket power consumption on Android by using okhttp for implementation.
  5. Improved Label and Graphics render performance on native with less invocation from native to js.

API documentation redesign

We are genuinely sorry that the previous API documentation usage experience is relatively poor, making the user’s learning curve steeper. In v3.5, we are using a new generator to make it more clear and more reliable. It’s just a start, and we will continue to improve the content of API documentation in the following months.

Please take a look at our new API documentation page.

Engine repository transfer and customization

To better support open source community, we have merged our engine native repository into engine repository, and it has been transferred to cocos/cocos-engine. Since now, we will be more open by maintaining public issues and public projects. If you are using customized engine, you must pay attention to this change, from v3.5, you only need to clone one engine repository. All customizations in typescript engine can be rebased to v3.5, but previous customizations in native engine must be reapplied manually through diffs. You can refer to the engine customization documentation.

Breaking changes

  • [FIX] Fix dragonbones/spine sockets transform (engine#10260)

    From version 3.5.0,please do not set an using node as the target of sp.Skeleton’s (or dragonBones.ArmatureDisplay) sockets directly, otherwise the transform parameters (Position, Rotation and Scale) will be overritten. The correct way is creating an empty node as the target node, and setting components which to be attached to Skeleton component as children of the target node. For more details and examples please read the Spine Attachment documentation.

  • Instead of global configuration of shadow bias, now we support individual shadow bias configuration for models, this allows detailed control of shadow effect on simple or complex surfaces. If you have any custom effect, please refer to the upgrade documentation for enabling it.

  • The effect syntax for Macro Tags and Functional Macros have been upgraded to avoid the occupation of standard glsl define, old effects in project will be upgrade automatically, but if you are using external effects without meta or writing a new one, you have to pay attention.

    • New syntax for Macro Tag: #pragma define-meta
    • New syntax for Funtional Macro: #pragma define

Knowing issues

  • On iOS 15.4, Apple enabled experimental feature “WebGL via Metal” by default, it’s causing some games to have serious rendering issue (graphics not refreshing, strange artifact etc). It’s been tracked in the issue, the temporary workaround is to disable ENABLE_WEBGL_ANTIALIAS macro in project settings (only disable it for iOS build is suggested). It will probably be fixed in future iOS versions.

Detailed change log

  • [FEATURE] Marionette: layer, mask, auto-reset trigger, empty state, localization (engine#10179)(engine#9913)(engine#10550)

  • [FEATURE] Improve user experience for 2D only project

  • [FEATURE] Integrate Android Frame Pacing library (engine#10327)

  • [FEATURE] Add low level geometry renderer for debugging (engine#10189)

  • [FEATURE] Make builtin material of FBX and GLTF directly editable (engine#10518)

  • [FEATURE] Support undo redo on editing assets (engine#10657)

  • [FEATURE] Add Flatten and SetHeight sculpt tool to terrain editor

  • [FEATURE] Support drag or select animation clips directly to the animation editor for editing

  • [FEATURE] Make animation module optional (engine#10257)

  • [FEATURE] Add shadow bias setting for MeshRenderer (engine#10102)

  • [FEATURE] Add constants for surface shaders (engine#10590)

  • [FEATURE] Support selecting mipmap range for Texture2D and TextureCube. (engine#10500)(engine#10096)

  • [FEATURE] Add Texture2D option to fix blending artifact caused by semi-transparent pixels (engine#10419)

  • [FEATURE] Add a new interface to query format feature info: Device.getFormatFeature (engine#9949)

  • [FEATURE] Add specular intensity for DCC effects (engine#10613)

  • [FEATURE] Rich text supports vertical alignment (engine#10340)

  • [FEATURE] Add spacingX property to Label inspector for BMFont type (engine#9541)

  • [FEATURE] Distribute touch events independently (engine#10712)

  • [FEATURE] Add destroy window event and recreate window event on windows platform (engine#10365)

  • [FEATURE] Add Node.getPathInHierarchy for getting complete path in hierarchy (engine#9536)

  • [FEATURE] Support custom texture compress tools in the Project Settings

  • [FEATURE] Support engine separation feature in OPPO platform build

  • [FEATURE] Support the OS Target (simulator or device) option in iOS platform build

  • [FEATURE] Add cmake hooks support for cocos-service (engine#10691)

  • [FEATURE] Support inspector droppable config (engine#10440)

  • [OPTIMIZE] Redesign platform abstraction layer

  • [OPTIMIZE] Optimize memory occupation of RealCurve, CurveRange (engine#10346)

  • [OPTIMIZE] Optimize decorator performance for particle system instantiation (engine#10323)

  • [OPTIMIZE] Avoid spine & dragonbones copping buffer from native to js (engine#10235)

  • [OPTIMIZE] Android: reduce power consumption by using okhttp to implement websockets (engine#10384)

  • [OPTIMIZE] Improve CameraComponent inspector user experience (engine#10708)

  • [OPTIMIZE] Improve Skybox inspector user experience (engine#10004)

  • [OPTIMIZE] Refine context 2d implementation, reduce call from native to js (engine#10211)

  • [OPTIMIZE] Reset light map when rebuild terrain (engine#10714)

  • [OPTIMIZE] Simplify cmake configurations in the native template (engine#10479)

  • [OPTIMIZE] Improve the JSON grouping strategy for building dependencies of merged bundle

  • [OPTIMIZE] Optimize texture compress panel, support searching config in panel

  • [OPTIMIZE] Optimize output logs of the build process, parameter completions of the command line build, parameter checks for some platforms

  • [OPTIMIZE] Disable bindingMappingInfo validation (engine#10701)

  • [OPTIMIZE] Reset-property from unknown type (engine#10687)

  • [OPTIMIZE] Exclude arm64 arch and specify x86_64 for ios simulator by default (engine#10679)

  • [OPTIMIZE] Do not play particle system component in Editor (engine#10678)

  • [OPTIMIZE] Disable post-process alpha blend (engine#10658)

  • [OPTIMIZE] Set simulator window position to center (engine#10655)

  • [OPTIMIZE] Remove cocos2d-x network deprecated code (engine#10647)

  • [OPTIMIZE] Remove deprecated API in animation module (engine#10645)

  • [OPTIMIZE] Remove some deprecated api (engine#10656)

  • [OPTIMIZE] Minor module refactor in core/renderer/ (engine#10643)

  • [OPTIMIZE] Add keep attribute to java class in project cfg (engine#10641)

  • [OPTIMIZE] Change rich text warning for splitting long strings (engine#10624)

  • [OPTIMIZE] Disallow animation on particle system properties (engine#10605)

  • [OPTIMIZE] Mark some methods as internal (engine#10604)

  • [OPTIMIZE] Disallow animation on customMaterial (engine#10601)

  • [OPTIMIZE] Do not remove all RichText children when resetting (engine#10599)

  • [OPTIMIZE] Modify the application interface name and remove the js keyword (engine#10556)

  • [OPTIMIZE] Optimize ts templates (engine#10553)

  • [OPTIMIZE] Optimize assets editing interface (engine#10531)

  • [OPTIMIZE] Output warning info when attached to the node has zero scaling (engine#10524)

  • [OPTIMIZE] Android: prevent class CocosWebSocket from obfuscation in release mode (engine#10511)

  • [OPTIMIZE] Optimize the way how animation component update its animation content (engine#10485)

  • [OPTIMIZE] Shader optimization always on (engine#10483)

  • [OPTIMIZE] Move AppDelegate into template (engine#10509)

  • [OPTIMIZE] Add dynamic library export macro (engine#10393)

  • [OPTIMIZE] Add DisallowMultiple for UIOpacity component (engine#10390)

  • [OPTIMIZE] SDL related interface encapsulation (engine#10385)

  • [OPTIMIZE] Optimize material editing using cache prop-value (engine#10376)

  • [OPTIMIZE] Keep EditBox placeholder overflow (engine#10368)

  • [OPTIMIZE] Use approx instead of strict equal in UITransform to avoid potential endless loop (engine#10357)

  • [OPTIMIZE] Modify diffuseMap property visibility (engine#10333)

  • [OPTIMIZE] Windows platform handles multiple events at once (engine#10344)

  • [OPTIMIZE] Shader code style improvements for future surface shader (engine#10326)

  • [OPTIMIZE] Bypass job system creation if not needed (engine#10308)

  • [OPTIMIZE] Optimize android download tasks. (engine#10274)

  • [OPTIMIZE] @disallowAnimation should not imply visible (engine#10262)

  • [OPTIMIZE] Optimized deletion operation for skybox environment map (engine#10248)

  • [OPTIMIZE] Optimize property name display format (engine#10241)

  • [OPTIMIZE] Return aabb objects back to pool after usage (engine#10230)

  • [OPTIMIZE] JSB add convert routines for size_t/long (engine#10198)

  • [OPTIMIZE] Change lighting map unpack and luminance multiply (engine#10185)

  • [OPTIMIZE] Rearrange IA input variables and functions for surface shader (engine#10123)

  • [OPTIMIZE] GFX: refactor access typed array to access flags (engine#10103)

  • [OPTIMIZE] Gfx: refactor binding mappings (engine#10013)

  • [OPTIMIZE] Use lagacyPublic to marked deprecated public interface (engine#9859)

  • [OPTIMIZE] Shadow info migration (engine#9857)

  • [OPTIMIZE] Safely destroy the geometry data (engine#9849)

  • [OPTIMIZE] UI: add same value check in property setter (engine#9744)

  • [OPTIMIZE] Optimize label serialization of “spacingX” and “underlineHeight” (engine#9629)

  • [OPTIMIZE] Rich Text format optimization by split into small sections (engine#9601)

  • [OPTIMIZE] Clean up gfx module for independent compilation (engine#9573)

  • [OPTIMIZE] Code style: replace macros to functions (engine#9572)

  • [OPTIMIZE] Set active to false if pass undefined or null to (engine#9571)

  • [OPTIMIZE] Optimize scroll view offset annotations (engine#9553)

  • [OPTIMIZE] Remove deprecated attributes: srcBlendFactor and dstBlendFactor#6461 (engine#9533)

  • [OPTIMIZE] Show pipelineStates in inspector (engine#10586)

  • [OPTIMIZE] Add category config file for docs (engine#10589)

  • [FIX] Fix rendering issue after baking light map with prefab

  • [FIX] Fix baking tool LightFX multi-thread error

  • [FIX] Fix prefab data lost when exiting from animation edit mode to prefab edit mode

  • [FIX] Fix prefab/scene data may be overwritten when switch between scene and prefab quickly

  • [FIX] Fix warning when clicking on different FBX assets

  • [FIX] Fix a series of optimization issues related to keyframe operation in the animation editor

  • [FIX] Fix build error on windows platform when editor path contains spaces

  • [FIX] Fix build failure after check [Main Bundle is remote] option on mac platform

  • [FIX] Fix an issue where the editor extension failed to start and could still be queried

  • [FIX] Fix prefab ID will be changed after rename of FBX or GLTF

  • [FIX] Fix octree culling rule (engine#10723)

  • [FIX] Walk around iOS 15.4 wasm memory issue (engine#10721)

  • [FIX] Bypass the bug that vulkan destroys resources that are still in use (engine#10716)

  • [FIX] Fix the performance issue caused by texture mipmap (engine#10713)

  • [FIX] Fix native module override (engine#10709)

  • [FIX] Fix #11925 skin instancing vertex attributes binding order for native… (engine#10703)

  • [FIX] Fix rich text children index bug (engine#10700)

  • [FIX] Fix sub context view not working when the design resolution size is less than 513 * 513 (engine#10698)

  • [FIX] Fix scroll view Auto Scroll Brake bug (engine#10693)

  • [FIX] Fix instanced rendering issue by joint index (engine#10692)

  • [FIX] Fix: set tmxAsset not apply file (engine#10690)

  • [FIX] Fix: set skeleton data, _cachedSockets should be reset (engine#10671)

  • [FIX] Remove playing audio when player is destroyed (engine#10670)

  • [FIX] Use correct macro patches (engine#10669)

  • [FIX] Correct profiler statistics (engine#10667)

  • [FIX] Fix screen size && touch event on Alipay platform (engine#10666)

  • [FIX] Fix ndk path not working (engine#10627)

  • [FIX] Fix android crash due to eglSurface unavailable (engine#10621)

  • [FIX] Use macro to set XXTEAKEY (engine#10607)

  • [FIX] Fix opacity bug when active false (engine#10595)

  • [FIX] Fix #11796 using cc_shadowbias without batching macro (engine#10587)

  • [FIX] Fix ui-mesh-renderer in editor (engine#10582)

  • [FIX] Fix ios enter forground crash by useless appDelegateBridge (engine#10580)

  • [FIX] Fix cross fade bug introduced in #10485 (engine#10576)

  • [FIX] Fix skeletal animation state got update twice (engine#10571)

  • [FIX] Avoid creating the window twice (engine#10566)

  • [FIX] Fix animation event type typing (engine#10562)

  • [FIX] Animation state bugfix (engine#10558)

  • [FIX] Fix watermark can not show normally (engine#10547)

  • [FIX] Fix sprite-frame size after repetitive dynamic creation of tiled map (engine#10535)

  • [FIX] Fix MTLTexture::doInit (engine#10532)

  • [FIX] Fix gfx::FrameBufferInfo rehash crash bug (engine#10525)

  • [FIX] Fix tiled show with pixel offset (engine#10523)

  • [FIX] Fix label Blend Factor bug for byte dance platform (engine#10516)

  • [FIX] Fix animation bug introduced from #10485 (engine#10512)

  • [FIX] Fix vec3 & vec4 transformAffine (engine#10508)

  • [FIX] Fix animation blending zero check (engine#10499)

  • [FIX] Fix pointer event when camera.orthoHeight changed (engine#10496)

  • [FIX] Fix Android websocket send string (engine#10495)

  • [FIX] Fix getUrlWithUuid smart hint issue (engine#10484)

  • [FIX] Fix punctual lights luminance * PI (engine#10480)

  • [FIX] Set light map clamp to border and fixed rebuild terrain weights (engine#10470)

  • [FIX] Clear Particle under UIMeshRenderer when play end (engine#10468)

  • [FIX] Fix: There is no need to execute updatePreview in the ready lifecycle (engine#10466)

  • [FIX] Fix fog accumulated error with multiple local lights (engine#10445)

  • [FIX] Fix templates and minor tweaks (engine#10434)

  • [FIX] Force update for spine color setting. (engine#10417)

  • [FIX] Fix opacity dirty bug when parent change (engine#10416)

  • [FIX] Fix gen-simulator (engine#10401)

  • [FIX] Fix animation not work caused by creating spine in a hided node (engine#10380)

  • [FIX] Fix 2D physics rotation error (engine#10373)

  • [FIX] Reset render data before set asset for spine/dragonbones (engine#10370)

  • [FIX] Fix crash caused by incorrect hash (engine#10359)

  • [FIX] Fix spine/dragonbones opacity update (engine#10349)

  • [FIX] Fix spine rendering confusion (engine#10348)

  • [FIX] Fix bug: reset renderer-component would not update model (engine#10342)

  • [FIX] Fix ios icon res lost (engine#10336)

  • [FIX] Fix compiling error with merged code (engine#10332)

  • [FIX] Fix: #11580 create new light source with unknown typed intensity in the inspector (engine#10324)

  • [FIX] Fix skinned mesh morph rendering (engine#10318)

  • [FIX] Avoid spine and dragon crash. (engine#10314)

  • [FIX] Fix spine in native platform can not get animation name (engine#10303)

  • [FIX] Fix dragonbones/spine sockets transform (engine#10260)

  • [FIX] Fix crash when app jump to camera (engine#10255)

  • [FIX] Fix translucent problem due to SurfaceView‘s limit (engine#10228)

  • [FIX] Fix unnecessary include for surface shader (engine#10220)

  • [FIX] Fix misuse of draw API on metal (engine#10195)

  • [FIX] Fix: linux build use static link. need add sndio lib (engine#10186)

  • [FIX] Fix ios device display effect (engine#10184)

  • [FIX] Fix spine binary data read issue. (engine#10172)

  • [FIX] Fix android 12 crash when using Vulkan backend (engine#10158)

  • [FIX] Fix fps calculation error for linux and QNX (engine#10141)

  • [FIX] Fix default scene camera clear flags is solid not skybox (engine#10132)

  • [FIX] Update ci yml files, add native/web prefix, cherry-pick from #10083 (engine#10104)

  • [FIX] Fix binding mappings (engine#10058)

  • [FIX] Fix shader code style (engine#10039)

  • [FIX] Fix decorator order issue in standalone mode (engine#9911)

  • [FIX] Fix keyframe editorExtras serialization (engine#9905)

  • [FIX] Fix pixels offset (engine#9829)

  • [FIX] Fix negative scale widget in editor (engine#9811)

  • [FIX] Particle alpha blend fix (engine#9784)

  • [FIX] Fix import relation (engine#9765)

  • [FIX] Fix bug that causes autoScrolling is always triggered in v3.5 (engine#9548)

  • [FIX] Fix crash: native model is destroyed but not removed from render scene (engine#9543)

  • [FIX] Update the split condition of RichText truncations (engine#10252)

  • [FIX] Fix iOS Simulator compile error when using TBB on Apple Silicon device (cocos-engine-external#232)


Please give me direct download link. My network cannot access to Editor Download on Cocos Dasboard. In Addition, login to Cocos Dashboard is very difficult, please remove this feature if can do it

Yes, the login form here is a pretty funny thing. You never know when it might show up at launch :open_mouth:

I am really excited about this new release! I have been using the previous version of Cocos Creator for a while, and it has been great! But now, we have some new features that are really cool.

x86 device crash after click button => = true