mirror of
https://github.com/godotengine/godot-docs.git
synced 2026-01-04 14:11:02 +03:00
674 lines
42 KiB
ReStructuredText
674 lines
42 KiB
ReStructuredText
.. _doc_upgrading_to_godot_4:
|
|
|
|
Upgrading from Godot 3 to Godot 4
|
|
=================================
|
|
|
|
Should I upgrade to Godot 4?
|
|
----------------------------
|
|
|
|
Before beginning the upgrade process, it's worth thinking about the advantages
|
|
and disadvantages that upgrading would bring to your project.
|
|
|
|
Advantages of upgrading
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Along with the
|
|
`new features present in 4.0 <https://github.com/godotengine/godot/blob/master/CHANGELOG.md>`__,
|
|
upgrading gives the following advantages:
|
|
|
|
- Many bugs are fixed in 4.0, but cannot be resolved in 3.x for various reasons
|
|
(such as graphics API differences or backwards compatibility).
|
|
- 4.x will enjoy a longer :ref:`support period <doc_release_policy>`. Godot 3.x
|
|
will continue to be supported for some time after 4.0 is released, but it will
|
|
eventually stop receiving support.
|
|
|
|
See :ref:`doc_docs_changelog` for a list of pages documenting new features in Godot 4.0.
|
|
|
|
Disadvantages of upgrading
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
If you don't *need* any features present in Godot 4.0, you may want to stay on
|
|
Godot 3.x for the following reasons:
|
|
|
|
- `Godot 3.x is tried and true, while Godot 4 remains in its early stages. <https://godotengine.org/article/release-management-4-0-and-beyond>`__
|
|
|
|
- Godot 4.0 is expected to contain workflow and performance issues that Godot
|
|
3.x doesn't have. If stability is crucial to your project, it's recommended to
|
|
wait for the first minor release in the 4.x series to land, along with its
|
|
respective patch release. This means staying on Godot 3.x until Godot 4.1.1 is
|
|
released.
|
|
|
|
- Godot 4 has fewer third-party tutorials available compared to Godot 3.x.
|
|
If you're new to game engines, you may have a better experience using Godot 3.x
|
|
as a result.
|
|
- Godot 4's baseline hardware requirements (such as memory usage) are slightly
|
|
higher, both for the editor and exported projects. This was required for the
|
|
implementation of some core optimizations.
|
|
- Since Godot 4 includes more features than Godot 3, Godot 4's binary size for
|
|
exported projects is larger. While this can be mitigated by
|
|
:ref:`optimizing a build for size <doc_optimizing_for_size>`, a 4.0 build with
|
|
a given set of enabled modules will remain larger compared to a 3.x build with
|
|
the same modules. This can be an issue for
|
|
:ref:`exporting to the Web <doc_exporting_for_web>`, as binary size directly
|
|
influences how fast the engine can initialize (regardless of download speed).
|
|
- Godot 4 does not and will not have support for GLES2 rendering.
|
|
(There is still support for GLES3 rendering using the new OpenGL backend,
|
|
which means that devices without Vulkan support can still run Godot 4.)
|
|
|
|
- If you are targeting **very** old hardware such as Intel Sandy Bridge (2nd
|
|
generation) integrated graphics, this will prevent the project from running
|
|
on such hardware after upgrading.
|
|
`Software OpenGL implementations <https://github.com/pal1000/mesa-dist-win>`__
|
|
can be used to bypass this limitation, but they're too slow for gaming.
|
|
|
|
Caveats of upgrading
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
**Since Godot 4 is a complete rewrite in many aspects, some features have
|
|
unfortunately been lost in the process.** Some of these features may be restored
|
|
in future Godot releases:
|
|
|
|
- Bullet physics was removed in favor of GodotPhysics. This only affects 3D
|
|
projects that used the default physics engine (which was Bullet) and didn't
|
|
manually change it to GodotPhysics. There are no plans to re-add Bullet physics
|
|
in core, but a third-party add-on could be created for it thanks to
|
|
GDExtension.
|
|
- Rendering in 2D is no longer performed in HDR, which means "overbright"
|
|
modulate values have no visible effect. This is planned to be restored at some
|
|
point in the future.
|
|
- While rendering still happens in HDR in 3D when using the Forward Plus or
|
|
Forward Mobile backends, Viewports cannot return HDR data anymore. This is
|
|
planned to be restored at some point in the future.
|
|
- Mono was replaced by .NET 6. This means exporting C# projects to Android, iOS
|
|
and HTML5 is no longer supported for now. Exporting C# projects to desktop
|
|
platforms is still supported. Support for exporting C# projects to more
|
|
platforms will be restored in future 4.x releases as upstream support
|
|
improves.
|
|
|
|
You can find a more complete list of functional regressions by searching for
|
|
`issues labeled "regression" but not "bug" on GitHub <https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Aregression+-label%3Abug>`__.
|
|
|
|
Preparing before the upgrade (optional)
|
|
---------------------------------------
|
|
|
|
If you want to be ready to upgrade to Godot 4 in the future, consider using
|
|
:ref:`class_Tweener` and the :ref:`class_Time` singleton in your project. These
|
|
classes are both available in Godot 3.5 and later.
|
|
|
|
This way, you won't be relying on the deprecated Tween node and OS time
|
|
functions, both of which are removed in Godot 4.0.
|
|
|
|
It's also a good idea to rename external shaders so that their extension is
|
|
``.gdshader`` instead of ``.shader``. Godot 3.x supports both extensions, but
|
|
only ``.gdshader`` is supported in Godot 4.0.
|
|
|
|
Running the project upgrade tool
|
|
--------------------------------
|
|
|
|
.. warning::
|
|
|
|
**Make a full backup of your project** before upgrading! The project upgrade
|
|
tool will *not* perform any backups of the project that is being upgraded.
|
|
|
|
You can backup a project by using version control, or by copying the project
|
|
folder to another location.
|
|
|
|
To use the project upgrade tool:
|
|
|
|
1. Open the Godot 4 project manager.
|
|
2. Import the Godot 3.x project using the **Import** button, or use the **Scan**
|
|
button to find the project within a folder.
|
|
3. Double-click the imported project (or select the project then choose **Edit**).
|
|
4. You will see a dialog appearing with two options: **Convert project.godot
|
|
Only** and **Convert Full Project**. After ensuring your project is backed up
|
|
(see the above warning), choose **Convert Full Project**. **Convert
|
|
project.godot Only** is intended to be used for advanced use cases *only*, in
|
|
case the conversion tool fails.
|
|
5. Wait until the project conversion process finishes. This can take up to a few
|
|
minutes for large projects with lots of scenes.
|
|
6. When the project manager interface becomes available again, double-click the
|
|
project (or select the project then choose **Edit**) to open it in the
|
|
editor.
|
|
|
|
.. note::
|
|
|
|
Only Godot 3.0 and later projects can be upgraded using the project
|
|
conversion tool found in the Godot 4 editor.
|
|
|
|
It's recommended to ensure that your project is up-to-date with the latest
|
|
3.x stable release before running the project upgrade tool.
|
|
|
|
Fixing the project after running the project upgrade tool
|
|
---------------------------------------------------------
|
|
|
|
After upgrading the project, you may notice that certain things don't look as
|
|
they should. Scripts will likely contain various errors as well (possibly
|
|
hundreds in large projects). This is because the project upgrade tool cannot
|
|
cater to all situations. Therefore, a large part of the upgrade process remains
|
|
manual.
|
|
|
|
Automatically renamed nodes and resources
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
The list below refers to nodes which were simply renamed for consistency or
|
|
clarity in Godot 4.0. The project upgrade tool renames them automatically in
|
|
your scripts.
|
|
|
|
One noteworthy set of renames is 3D nodes, which all got a ``3D`` suffix added for
|
|
consistency with their 2D counterparts. For example, ``Area`` is now ``Area3D``.
|
|
|
|
For ease of searching, this table lists all nodes and resources that were renamed
|
|
and are automatically converted, excluding the ones which only involved adding
|
|
a ``3D`` suffix to the old name:
|
|
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Old name (Godot 3.x) | New name (Godot 4) |
|
|
+=========================================+===========================================+
|
|
| AnimatedSprite | AnimatedSprite2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVRCamera | XRCamera3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVRController | XRController3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVRAnchor | XRAnchor3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVRInterface | XRInterface |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVROrigin | XROrigin3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVRPositionalTracker | XRPositionalTracker |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ARVRServer | XRServer |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| CubeMesh | BoxMesh |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| EditorSpatialGizmo | EditorNode3DGizmo |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| EditorSpatialGizmoPlugin | EditorNode3DGizmoPlugin |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| GIProbe | VoxelGI |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| GIProbeData | VoxelGIData |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| GradientTexture | GradientTexture1D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| KinematicBody | CharacterBody3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| KinematicBody2D | CharacterBody2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Light2D | PointLight2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| LineShape2D | WorldBoundaryShape2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Listener | AudioListener3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| NavigationMeshInstance | NavigationRegion3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| NavigationPolygonInstance | NavigationRegion2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Navigation2DServer | NavigationServer2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| PanoramaSky | Sky |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Particles | GPUParticles3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Particles2D | GPUParticles2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ParticlesMaterial | ParticleProcessMaterial |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Physics2DDirectBodyState | PhysicsDirectBodyState2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Physics2DDirectSpaceState | PhysicsDirectSpaceState2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Physics2DServer | PhysicsServer2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Physics2DShapeQueryParameters | PhysicsShapeQueryParameters2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Physics2DTestMotionResult | PhysicsTestMotionResult2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| PlaneShape | WorldBoundaryShape3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Position2D | Marker2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Position3D | Marker3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ProceduralSky | Sky |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| RayShape | SeparationRayShape3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| RayShape2D | SeparationRayShape2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ShortCut | Shortcut |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Spatial | Node3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| SpatialGizmo | Node3DGizmo |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| SpatialMaterial | StandardMaterial3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Sprite | Sprite2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| StreamTexture | CompressedTexture2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| TextureProgress | TextureProgressBar |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VideoPlayer | VideoStreamPlayer |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| ViewportContainer | SubViewportContainer |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| Viewport | SubViewport |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisibilityEnabler | VisibleOnScreenEnabler3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisibilityNotifier | VisibleOnScreenNotifier3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisibilityNotifier2D | VisibleOnScreenNotifier2D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisibilityNotifier3D | VisibleOnScreenNotifier3D |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualServer | RenderingServer |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarConstant | VisualShaderNodeFloatConstant |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarFunc | VisualShaderNodeFloatFunc |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarOp | VisualShaderNodeFloatOp |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarClamp | VisualShaderNodeClamp |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorClamp | VisualShaderNodeClamp |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarInterp | VisualShaderNodeMix |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorInterp | VisualShaderNodeMix |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorScalarMix | VisualShaderNodeMix |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarSmoothStep | VisualShaderNodeSmoothStep |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorSmoothStep | VisualShaderNodeSmoothStep |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorScalarSmoothStep | VisualShaderNodeSmoothStep |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorScalarStep | VisualShaderNodeStep |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarSwitch | VisualShaderNodeSwitch |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarTransformMult | VisualShaderNodeTransformOp |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarDerivativeFunc | VisualShaderNodeDerivativeFunc |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVectorDerivativeFunc | VisualShaderNodeDerivativeFunc |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeBooleanUniform | VisualShaderNodeBooleanParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeColorUniform | VisualShaderNodeColorParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeScalarUniform | VisualShaderNodeFloatParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeCubeMapUniform | VisualShaderNodeCubeMapParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeTextureUniform | VisualShaderNodeTexture2DParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeTextureUniformTriplanar | VisualShaderNodeTextureParameterTriplanar |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeTransformUniform | VisualShaderNodeTransformParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeVec3Uniform | VisualShaderNodeVec3Parameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeUniform | VisualShaderNodeParameter |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
| VisualShaderNodeUniformRef | VisualShaderNodeParameterRef |
|
|
+-----------------------------------------+-------------------------------------------+
|
|
|
|
.. _doc_upgrading_to_godot_4_manual_rename:
|
|
|
|
Manually renaming methods, properties, signals and constants
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Due to how the project upgrade tool works, not all
|
|
:abbr:`API (Application Programming Interface)` renames can be performed automatically.
|
|
The list below contains all renames that must be performed manually using the script editor.
|
|
|
|
If you cannot find a node or resource in the list below, refer to the above
|
|
table to find its new name.
|
|
|
|
.. tip::
|
|
|
|
You can use the **Replace in Files** dialog to speed up replacement by pressing
|
|
:kbd:`Ctrl + Shift + R` while the script editor is open. However, be careful
|
|
as the Replace in Files dialog doesn't offer any way to undo a replacement.
|
|
Use version control to commit your upgrade work regularly.
|
|
Command line tools such as `sd <https://github.com/chmln/sd>`__ can also be used
|
|
if you need something more flexible than the editor's Replace in Files dialog.
|
|
|
|
If using C#, remember to search for outdated API usage with PascalCase
|
|
notation in the project (and perform the replacement with PascalCase
|
|
notation).
|
|
|
|
**Methods**
|
|
|
|
- File and Directory classes were replaced by :ref:`class_FileAccess` and
|
|
:ref:`class_DirAccess`, which have an entirely different API. Several methods
|
|
are now static, which means you can call them directly on FileAccess or
|
|
DirAccess without having to create an instance of that class.
|
|
- Screen and window-related methods from the :ref:`class_OS` singleton (such as
|
|
``OS.get_screen_size()``) were moved to the :ref:`class_DisplayServer` singleton.
|
|
Method naming was also changed to use the
|
|
``DisplayServer.<object>_<get/set>_property()`` form instead. For example,
|
|
``OS.get_screen_size()`` becomes ``DisplayServer.screen_get_size()``.
|
|
- Time and date methods from the :ref:`class_OS` singleton were moved to the
|
|
:ref:`class_Time` singleton.
|
|
(The Time singleton is also available in Godot 3.5 and later.)
|
|
- You may have to replace some ``instance()`` calls with ``instantiate()``. The
|
|
converter *should* handle this automatically, but this relies on custom code that
|
|
may not work in 100% of situations.
|
|
- AcceptDialog's ``set_autowrap()`` is now ``set_autowrap_mode()``.
|
|
- AnimationNode's ``process()`` is now ``_process()``
|
|
(note the leading underscore, which denotes a virtual method).
|
|
- AStar2D and AStar3D's ``get_points()`` is now ``get_points_id()``.
|
|
- BaseButton's ``set_event()`` is now ``set_shortcut()``.
|
|
- Camera2D's ``get_v_offset()`` is now ``get_drag_vertical_offset()``.
|
|
- Camera2D's ``set_v_offset()`` is now ``set_drag_vertical_offset()``.
|
|
- Camera2D's ``make_current()`` is now ``set_current()``.
|
|
- CanvasItem's ``update()`` is now ``queue_redraw()``.
|
|
- Control's ``set_tooltip()`` is now ``set_tooltip_text()``.
|
|
- EditorNode3DGizmoPlugin's ``create_gizmo()`` is now ``_create_gizmo()``
|
|
(note the leading underscore, which denotes a virtual method).
|
|
- ENetMultiplayerPeer's ``get_peer_port()`` is now ``get_peer()``.
|
|
- FileDialog's ``get_mode()`` is now ``get_file_mode()``.
|
|
- FileDialog's ``set_mode()`` is now ``set_file_mode()``.
|
|
- GraphNode's ``get_offset()`` is now ``get_position_offset()``.
|
|
- GridMap's ``world_to_map()`` is now ``local_to_map()``.
|
|
- GridMap's ``map_to_world()`` is now ``map_to_local()``.
|
|
- Image's ``get_rect()`` is now ``get_region()``.
|
|
- ItemList's ``get_v_scroll()`` is now ``get_v_scroll_bar()``.
|
|
- MultiPlayerAPI's ``get_network_connected_peers()`` is now ``get_peers()``.
|
|
- MultiPlayerAPI's ``get_network_peer()`` is now ``get_peer()``.
|
|
- MultiPlayerAPI's ``get_network_unique_id()`` is now ``get_unique_id()``.
|
|
- MultiPlayerAPI's ``has_network_peer()`` is now ``has_multiplayer_peer()``.
|
|
- PacketPeerUDP's ``is_listening()`` is now ``is_bound()``.
|
|
- PacketPeerUDP's ``listen()`` is now ``bound()``.
|
|
- ParticleProcessMaterial's ``set_flag()`` is now ``set_particle_flag()``.
|
|
- ResourceFormatLoader's ``get_dependencies()`` is now ``_get_dependencies()``
|
|
(note the leading underscore, which denotes a virtual method).
|
|
- Shortcut's ``is_valid()`` is now ``has_valid_event()``.
|
|
- TileMap's ``world_to_map()`` is now ``local_to_map()``.
|
|
- TileMap's ``map_to_world()`` is now ``map_to_local()``.
|
|
|
|
**Properties**
|
|
|
|
.. note::
|
|
|
|
If a property is listed here, its associated getter and setter methods must
|
|
also be renamed manually if used in the project. For example, PathFollow2D
|
|
and PathFollow3D's ``set_offset()`` and ``get_offset()`` must be renamed to
|
|
``set_progress()`` and ``get_progress()`` respectively.
|
|
|
|
- Control's ``margin`` is now ``offset``.
|
|
- Label's ``percent_visible`` is now ``visible_ratio``.
|
|
- MultiPlayerAPI's ``refuse_new_network_connections`` is now ``refuse_new_connections``.
|
|
- PathFollow2D and PathFollow3D's ``offset`` is now ``progress``.
|
|
- TextureProgressBar's ``percent_visible`` is now ``show_percentage``.
|
|
- The ``extents`` property on CSG nodes and VoxelGI will have to be replaced
|
|
with ``size``, with the set value halved (as they're no longer half-extents).
|
|
This also affects its setter/getter methods ``set_extents()`` and
|
|
``get_extents()``.
|
|
- The ``Engine.editor_hint`` property was removed in favor of the
|
|
``Engine.is_editor_hint()`` *method*. This is because it's read-only, and
|
|
properties in Godot are not used for read-only values.
|
|
|
|
**Enums**
|
|
|
|
- CPUParticles2D's ``FLAG_MAX`` is now ``PARTICLE_FLAG_MAX``.
|
|
|
|
**Signals**
|
|
|
|
- FileSystemDock's ``instantiate`` is now ``instance``.
|
|
- CanvasItem's ``hide`` is now ``hidden``. This rename does **not** apply to the
|
|
``hide()`` method, only the signal.
|
|
- Tween's ``tween_all_completed`` is now ``loop_finished``.
|
|
- EditorSettings' ``changed`` is now ``settings_changed``.
|
|
|
|
**Constants**
|
|
|
|
- Color names are now uppercase and use underscores between words.
|
|
For example, ``Color.palegreen`` is now ``Color.PALE_GREEN``.
|
|
- MainLoop's ``NOTIFICATION_`` constants were moved to global scope, which means
|
|
you can remove the ``MainLoop.`` prefix when referencing them.
|
|
- MainLoop's ``NOTIFICATION_WM_QUIT_REQUEST`` is now ``NOTIFICATION_WM_CLOSE_REQUEST``.
|
|
|
|
Checking project settings
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Several project settings were renamed, and some of them had their enums changed
|
|
in incompatible ways (such as shadow filter quality). This means you may need to
|
|
set some project settings' values again. Make sure the **Advanced** toggle is
|
|
enabled in the project settings dialog so you can see all project settings.
|
|
|
|
Checking Environment settings
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Graphics quality settings were moved from Environment properties to project
|
|
settings. This was done to make run-time quality adjustments easier, without
|
|
having to access the currently active Environment resource then modify its
|
|
properties.
|
|
|
|
As a result, you will have to configure Environment quality settings in the
|
|
project settings as old Environment quality settings aren't converted
|
|
automatically to project settings.
|
|
|
|
If you have a graphics settings menu that changed environment properties in
|
|
Godot 3.x, you will have to change its code to call :ref:`class_RenderingServer`
|
|
methods that affect environment effects' quality. Only the "base" toggle of each
|
|
environment effect and its visual knobs remain within the Environment resource.
|
|
|
|
Updating external shaders
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
**Only shaders that are built-in to a scene file are modified by the project
|
|
upgrade tool.** This means external shaders (saved to ``.gdshader`` files)
|
|
need to be updated manually.
|
|
|
|
The ``.shader`` file extension is also no longer supported, which means you must
|
|
rename ``.shader`` files to ``.gdshader`` and update references accordingly in
|
|
scene/resource files using an external text editor.
|
|
|
|
Some notable renames you will need to perform in shaders are:
|
|
|
|
- Texture filter and repeat modes are now set on individual uniforms, rather
|
|
than the texture files themselves.
|
|
- ``hint_albedo`` is now ``source_color``.
|
|
- :ref:`Projection matrix variables were renamed. <doc_spatial_shader>`
|
|
|
|
See :ref:`doc_shading_language` for more information.
|
|
|
|
Updating scripts to take backwards-incompatible changes into account
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Some changes performed between Godot 3.x and 4 are not renames, but they still
|
|
break backwards compatibility due to different default behavior.
|
|
|
|
The most notable examples of this are:
|
|
|
|
- Both :ref:`class_String` and :ref:`class_StringName` are now exposed to
|
|
GDScript. This allows for greater optimization, as StringName is specifically
|
|
designed to be used for "constant" strings that are created once and reused
|
|
many times. These types are not equivalent to each other, which means
|
|
``"example" == &"example"`` returns ``false`` (``&`` creates a StringName).
|
|
This should be taken into account for ``if`` and ``match`` comparisons in
|
|
particular, as you may have to replace ``"example"`` with ``&"example"``.
|
|
- :ref:`GDScript setter and getter syntax <doc_gdscript_basics_setters_getters>`
|
|
was changed, but it's only partially converted by the conversion tool. In most
|
|
cases, manual changes are required to make setters and getters working again.
|
|
- :ref:`GDScript signal connection syntax <doc_gdscript_signals>` was changed.
|
|
The conversion tool will use the string-based syntax which is still present in
|
|
Godot 4, but it's recommended to switch to the :ref:`class_Signal`-based syntax
|
|
described on the linked page. This way, strings are no longer involved,
|
|
which avoids issues with signal name errors that can only be discovered at run-time.
|
|
- Built-in scripts that are :ref:`tool scripts <doc_running_code_in_the_editor>`
|
|
do not get the ``tool`` keyword converted to the ``@tool`` annotation.
|
|
- The Tween node was removed in favor of Tweeners, which are also available in
|
|
Godot 3.5 and later. See the
|
|
`original pull request <https://github.com/godotengine/godot/pull/41794>`__
|
|
for details.
|
|
- ``randomize()`` is now automatically called on project load, so deterministic
|
|
randomness with the global RandomNumberGenerate instance requires manually
|
|
setting a seed in a script's ``_ready()`` function.
|
|
- ``call_group()``, ``set_group()`` and ``notify_group()`` are now immediate by
|
|
default. If calling an expensive function, this may result in stuttering when
|
|
used on a group containing a large number of nodes. To use deferred calls like
|
|
before, replace ``call_group(...)`` with
|
|
``call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)`` (and do the same with
|
|
``set_group()`` and ``notify_group()`` respectively).
|
|
- The ``rotation_degrees`` property was removed in favor of ``rotation`` property,
|
|
which is still in radians but is automatically displayed as degrees in the
|
|
editor. This breaks animations, as these are not converted automatically by the
|
|
conversion tool.
|
|
- :ref:`class_AABB`'s ``has_no_surface()`` was inverted and renamed to ``has_surface()``.
|
|
- :ref:`class_AABB` and :ref:`class_Rect2`'s ``has_no_area()`` was inverted and
|
|
renamed to ``has_area()``.
|
|
- :ref:`class_AnimatedTexture`'s ``fps`` property was replaced by ``speed_scale``,
|
|
which works the same as AnimationPlayer's ``playback_speed`` property.
|
|
- :ref:`class_AnimatedSprite2D` and :ref:`class_AnimatedSprite3D` now allow
|
|
negative ``speed_scale`` values. This may break animations if you relied on
|
|
``speed_scale`` being internally clamped to ``0.0``.
|
|
- :ref:`class_BaseButton`'s signals are now ``button_up`` and ``button_down``.
|
|
The ``pressed`` property is now ``button_pressed``.
|
|
- :ref:`class_Camera2D`'s ``rotating`` property was replaced by
|
|
``ignore_rotation``, which has inverted behavior.
|
|
- Camera2D's ``zoom`` property was inverted: higher values are now more zoomed
|
|
in, instead of less.
|
|
- :ref:`class_Node`'s ``remove_and_skip()`` method was removed.
|
|
If you need to reimplement it in a script, you can use the
|
|
`old C++ implementation <https://github.com/godotengine/godot/blob/7936b3cc4c657e4b273b376068f095e1e0e4d82a/scene/main/node.cpp#L1910-L1945>`__
|
|
as a reference.
|
|
- ``OS.get_system_time_secs()`` should be converted to
|
|
``Time.get_time_dict_from_system()["second"]``.
|
|
- :ref:`class_ResourceSaver`'s ``save()`` method now has its arguments swapped around
|
|
(``resource: Resource, path: String``). This also applies to
|
|
:ref:`class_ResourceFormatSaver`'s ``_save()`` method.
|
|
- A :ref:`class_StreamPeerTCP` must have ``poll()`` called on it to update its
|
|
state, instead of relying on ``get_status()`` automatically polling:
|
|
`GH-59582 <https://github.com/godotengine/godot/pull/59582>`__
|
|
- :ref:`class_String`'s ``right()`` method `has changed behavior <https://github.com/godotengine/godot/pull/36180>`__:
|
|
it now returns a number of characters from the right of the string, rather than
|
|
the right side of the string from a given position. If you need the old behavior,
|
|
you can use ``substr()`` instead.
|
|
- ``is_connected_to_host()`` was removed from StreamPeerTCP and PacketPeerUDP as
|
|
per `GH-59582 <https://github.com/godotengine/godot/pull/59582>`__.
|
|
``get_status()`` can be used in StreamPeerTCP instead.
|
|
``is_socket_connected()`` can be used in :ref:`class_PacketPeerUDP` instead.
|
|
- In ``_get_property_list()``, the ``or_lesser`` property hint string is now ``or_less``.
|
|
- In ``_get_property_list()``, the ``noslider`` property hint string is now ``no_slider``.
|
|
- VisualShaderNodeVec4Parameter now takes a :ref:`class_Vector4` as parameter
|
|
instead of a :ref:`class_Quaternion`.
|
|
|
|
**Removed or replaced nodes/resources**
|
|
|
|
This lists all nodes that were replaced by another node requiring different
|
|
configuration. The setup must be done from scratch again, as the project
|
|
converter doesn't support updating existing setups:
|
|
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| Removed node | Closest approximation | Comment |
|
|
+=====================+=======================+============================================================================+
|
|
| AnimationTreePlayer | AnimationTree | AnimationTreePlayer was deprecated since Godot 3.1. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| BakedLightmap | LightmapGI | See :ref:`doc_baked_lightmaps`. |
|
|
+---------------------+-----------------------+ |
|
|
| BakedLightmapData | LightmapGIData | |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| BitmapFont | FontFile | See :ref:`doc_gui_using_fonts`. |
|
|
+---------------------+-----------------------+ |
|
|
| DynamicFont | FontFile | |
|
|
+---------------------+-----------------------+ |
|
|
| DynamicFontData | FontFile | |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| Navigation2D | Node2D | Replaced by :ref:`other 2D Navigation nodes <doc_navigation_overview_2d>`. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| Navigation3D | Node3D | Replaced by :ref:`other 3D Navigation nodes <doc_navigation_overview_3d>`. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| OpenSimplexNoise | FastNoiseLite | Has different parameters and more noise types such as cellular. No |
|
|
| | | support for 4D noise as it's absent from the FastNoiseLite library. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| ToolButton | Button | ToolButton was Button with the **Flat** property enabled by default. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| YSort | Node2D or Control | CanvasItem has a new **Y Sort Enabled** property in 4.0. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| ProximityGroup | Node3D | :ref:`class_VisibleOnScreenNotifier3D` can act as a replacement. |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| Portal | Node3D | Portal and room occlusion culling was replaced by raster |
|
|
| | | :ref:`occlusion culling <doc_occlusion_culling>` |
|
|
| | | (OccluderInstance3D node), which requires a different setup process. |
|
|
+---------------------+-----------------------+ |
|
|
| Room | Node3D | |
|
|
+---------------------+-----------------------+ |
|
|
| RoomManager | Node3D | |
|
|
+---------------------+-----------------------+ |
|
|
| RoomGroup | Node3D | |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
| Occluder | Node3D | Geometry occlusion culling was replaced by raster |
|
|
| | | :ref:`occlusion culling <doc_occlusion_culling>` |
|
|
| | | (OccluderInstance3D node), which requires a different setup process. |
|
|
+---------------------+-----------------------+ |
|
|
| OccluderShapeSphere | Resource | |
|
|
+---------------------+-----------------------+----------------------------------------------------------------------------+
|
|
|
|
If loading an old project, the node will be replaced with its
|
|
*Closest approximation* automatically (even if not using the project upgrade tool).
|
|
|
|
**Threading changes**
|
|
|
|
:ref:`Threading <doc_using_multiple_threads>` APIs have changed in 4.0. For
|
|
example, the following code snippet in Godot 3.x must be modified to work in 4.0:
|
|
|
|
::
|
|
|
|
# 3.x
|
|
var start_success = new_thread.start(self, "__threaded_background_loader",
|
|
[resource_path, thread_num]
|
|
)
|
|
|
|
# 4.0
|
|
var start_success = new_thread.start(__threaded_background_loader.bind(resource_path, thread_num))
|
|
|
|
``Thread.is_active()`` is no longer used and should be converted to ``Thread.is_alive()``.
|
|
|
|
.. seealso::
|
|
|
|
See the `changelog <https://github.com/godotengine/godot/blob/master/CHANGELOG.md>`__
|
|
for a full list of changes between Godot 3.x and 4.
|
|
|
|
ArrayMesh resource compatibility breakage
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
If you've saved an ArrayMesh resource to a ``.res`` or ``.tres`` file, the
|
|
format used in 4.0 is not compatible with the one used in 3.x. You will need to
|
|
go through the process of importing the source mesh file and saving it as an
|
|
ArrayMesh resource again.
|
|
|
|
List of automatically renamed methods, properties, signals and constants
|
|
------------------------------------------------------------------------
|
|
|
|
The `editor/project_converter_3_to_4.cpp <https://github.com/godotengine/godot/blob/master/editor/project_converter_3_to_4.cpp>`__
|
|
source file lists all automatic renames performed by the project upgrade tool.
|
|
Lines that are commented out refer to API renames that :ref:`cannot be performed automatically <doc_upgrading_to_godot_4_manual_rename>`.
|
|
|
|
Porting editor settings
|
|
-----------------------
|
|
|
|
Godot 3.x and 4.0 use different editor settings files. This means their settings
|
|
can be changed independently from each other.
|
|
|
|
If you wish to port over your Godot 3.x settings to Godot 4, open the
|
|
:ref:`editor settings folder <doc_data_paths_editor_data_paths>` and copy
|
|
``editor_settings-3.tres`` to ``editor_settings-4.tres`` while the Godot 4
|
|
editor is closed.
|
|
|
|
.. note::
|
|
|
|
Many settings' names and categories have changed since Godot 3.x. Editor settings
|
|
whose name or category has changed won't carry over to Godot 4.0; you will
|
|
have to set their values again.
|