Rename Tutorials to Manual, move migration guide to a higher level (#6509)

This commit is contained in:
Yuri Sizov
2023-01-06 02:37:47 +03:00
committed by GitHub
parent b603b1df3a
commit 3f8fd6d127
6 changed files with 41 additions and 42 deletions

View File

@@ -1,11 +1,11 @@
Editor manual
=============
Editor introduction
===================
In this section, we cover the Godot editor in general, from its interface to
using it with the command line.
The editor's interface
----------------------
Editor's interface
------------------
The following pages explain how to use the various windows, workspaces, and
docks that make up the Godot editor. We cover some specific editors' interface
@@ -35,12 +35,12 @@ should be aware of.
using_the_web_editor
For developers
--------------
Advanced features
-----------------
The articles below focus on features for developers, like calling Godot from the
command lines and using an external text editor such as Visual Studio Code or
Emacs.
The articles below focus on advanced features useful for experienced developers,
such as calling Godot from the command line and using an external text editor
like Visual Studio Code or Emacs.
.. toctree::
:maxdepth: 1
@@ -61,12 +61,3 @@ a project that's only 2D or only 3D and don't want to see what you don't need.
:name: toc-editor-features
managing_editor_features
Upgrading to Godot 4
--------------------
.. toctree::
:maxdepth: 1
:name: toc-editor-upgrading
upgrading_to_godot_4

View File

@@ -1,673 +0,0 @@
.. _doc_upgrading_to_godot_4:
Upgrading 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.