upgrading_to_godot_4.rst 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. .. _doc_upgrading_to_godot_4:
  2. Upgrading from Godot 3 to Godot 4
  3. =================================
  4. Should I upgrade to Godot 4?
  5. ----------------------------
  6. Before beginning the upgrade process, it's worth thinking about the advantages
  7. and disadvantages that upgrading would bring to your project.
  8. Advantages of upgrading
  9. ~~~~~~~~~~~~~~~~~~~~~~~
  10. Along with the
  11. `new features present in 4.0 <https://godotengine.org/article/godot-4-0-sets-sail>`__,
  12. upgrading gives the following advantages:
  13. - Many bugs are fixed in 4.0, but cannot be resolved in 3.x for various reasons
  14. (such as graphics API differences or backwards compatibility).
  15. - 4.x will enjoy a longer :ref:`support period <doc_release_policy>`. Godot 3.x
  16. will continue to be supported for some time after 4.0 is released, but it will
  17. eventually stop receiving support.
  18. See :ref:`doc_docs_changelog` for a list of pages documenting new features in
  19. Godot 4.0, and :ref:`doc_list_of_features` for a list of all features in Godot.
  20. Disadvantages of upgrading
  21. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  22. If you don't *need* any features present in Godot 4.0, you may want to stay on
  23. Godot 3.x for the following reasons:
  24. - `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>`__
  25. - Godot 4.0 is expected to contain workflow and performance issues that Godot
  26. 3.x doesn't have. These issues will be ironed out over time in future
  27. Godot 4.x releases.
  28. - Godot 4 has fewer third-party tutorials available compared to Godot 3.x.
  29. If you're new to game engines, you may have a better experience using Godot 3.x
  30. as a result.
  31. - Godot 4's baseline hardware requirements (such as memory usage) are slightly
  32. higher, both for the editor and exported projects. This was required for the
  33. implementation of some core optimizations.
  34. - Since Godot 4 includes more features than Godot 3, Godot 4's binary size for
  35. exported projects is larger. While this can be mitigated by
  36. :ref:`optimizing a build for size <doc_optimizing_for_size>`, a 4.0 build with
  37. a given set of enabled modules will remain larger compared to a 3.x build with
  38. the same modules. This can be an issue for
  39. :ref:`exporting to the Web <doc_exporting_for_web>`, as binary size directly
  40. influences how fast the engine can initialize (regardless of download speed).
  41. - Godot 4 does not and will not have support for GLES2 rendering.
  42. (There is still support for GLES3 rendering using the new Compatibility renderer,
  43. which means that devices without Vulkan support can still run Godot 4.)
  44. - If you are targeting **very** old hardware such as Intel Sandy Bridge (2nd
  45. generation) integrated graphics, this will prevent the project from running
  46. on such hardware after upgrading.
  47. `Software OpenGL implementations <https://github.com/pal1000/mesa-dist-win>`__
  48. can be used to bypass this limitation, but they're too slow for gaming.
  49. Caveats of upgrading
  50. ~~~~~~~~~~~~~~~~~~~~
  51. .. UPDATE: Planned feature. There are several planned or missing features that
  52. .. may be added back in the future. Check this section for accuracy and update
  53. .. it if things have changed!
  54. **Since Godot 4 is a complete rewrite in many aspects, some features have
  55. unfortunately been lost in the process.** Some of these features may be restored
  56. in future Godot releases:
  57. - Bullet physics was removed in favor of GodotPhysics. This only affects 3D
  58. projects that used the default physics engine (which was Bullet) and didn't
  59. manually change it to GodotPhysics. There are no plans to re-add Bullet physics
  60. in core, but a third-party add-on could be created for it thanks to
  61. GDExtension.
  62. - By default, rendering in 2D is no longer performed in HDR, which means
  63. "overbright" modulate values have no visible effect. Since Godot 4.2, you can
  64. enable the project setting :ref:`HDR 2D<class_ProjectSettings_property_rendering/viewport/hdr_2d>`
  65. to perform 2D rendering in HDR. See also :ref:`doc_environment_and_post_processing_using_glow_in_2d`.
  66. - While rendering still happens in HDR in 3D when using the Forward+ or Mobile
  67. renderers, Viewports cannot return HDR data anymore. This is planned to be
  68. restored at some point in the future.
  69. - Mono was replaced by .NET 6. This means exporting C# projects to Android, iOS
  70. and HTML5 is no longer supported for now. Exporting C# projects to desktop
  71. platforms is still supported, and as of 4.2 there's experimental support for
  72. exporting to mobile platforms. Support for exporting C# projects to more
  73. platforms will be restored in future 4.x releases as upstream support
  74. improves.
  75. You can find a more complete list of functional regressions by searching for
  76. `issues labeled "regression" but not "bug" on GitHub <https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Aregression+-label%3Abug>`__.
  77. Preparing before the upgrade (optional)
  78. ---------------------------------------
  79. If you want to be ready to upgrade to Godot 4 in the future, consider using
  80. :ref:`class_Tweener` and the :ref:`class_Time` singleton in your project. These
  81. classes are both available in Godot 3.5 and later.
  82. This way, you won't be relying on the deprecated Tween node and OS time
  83. functions, both of which are removed in Godot 4.0.
  84. It's also a good idea to rename external shaders so that their extension is
  85. ``.gdshader`` instead of ``.shader``. Godot 3.x supports both extensions, but
  86. only ``.gdshader`` is supported in Godot 4.0.
  87. Running the project upgrade tool
  88. --------------------------------
  89. .. danger::
  90. **Make a full backup of your project** before upgrading! The project upgrade
  91. tool will *not* perform any backups of the project that is being upgraded.
  92. You can backup a project by using version control, or by copying the project
  93. folder to another location.
  94. Using the Project Manager
  95. ~~~~~~~~~~~~~~~~~~~~~~~~~
  96. To use the project upgrade tool:
  97. 1. Open the Godot 4 Project Manager.
  98. 2. Import the Godot 3.x project using the **Import** button, or use the **Scan**
  99. button to find the project within a folder.
  100. 3. Double-click the imported project (or select the project then choose **Edit**).
  101. 4. You will see a dialog appearing with two options: **Convert project.godot
  102. Only** and **Convert Full Project**. After ensuring your project is backed up
  103. (see the above warning), choose **Convert Full Project**. **Convert
  104. project.godot Only** is intended to be used for advanced use cases *only*, in
  105. case the conversion tool fails.
  106. 5. Wait until the project conversion process finishes. This can take up to a few
  107. minutes for large projects with lots of scenes.
  108. 6. When the Project Manager interface becomes available again, double-click the
  109. project (or select the project then choose **Edit**) to open it in the
  110. editor.
  111. If you hit conversion issues due to some project files being too large or long,
  112. you can use the command line to upgrade the project (see below). This will allow
  113. you to override the converter's size limits.
  114. Using the command line
  115. ~~~~~~~~~~~~~~~~~~~~~~
  116. To use the project upgrade tool from the :ref:`command line <doc_command_line_tutorial>`,
  117. it's recommended to validate the project conversion by running the Godot editor binary with the following arguments:
  118. ::
  119. # [<max_file_kb>] [<max_line_size>] are optional arguments.
  120. # Remove them if you aren't changing their values.
  121. path/to/godot.binary --path /path/to/project/folder --validate-conversion-3to4 [<max_file_kb>] [<max_line_size>]
  122. If the list of planned upgrades looks good to you, run the following command on
  123. the Godot editor binary to upgrade project files:
  124. ::
  125. # [<max_file_kb>] [<max_line_size>] are optional arguments.
  126. # Remove them if you aren't changing their values.
  127. path/to/godot.binary --path /path/to/project/folder --convert-3to4 [<max_file_kb>] [<max_line_size>]
  128. ``[<max_file_kb>]`` and ``[<max_line_size>]`` are *optional* arguments to specify
  129. the maximum size of files to be converted (in kilobytes and lines). The default
  130. limits are 4 MB and 100,000 lines respectively. If a file hits either of those
  131. limits, it will not be upgraded by the project converter. This is useful to
  132. prevent large resources from slowing down the upgrade to a crawl.
  133. If you still want large files to be converted by the project upgrade tool,
  134. increase the size limits when running the project upgrade tool. For example,
  135. running the Godot editor binary with those arguments increases both limits by a
  136. 10× factor:
  137. ::
  138. path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000
  139. .. note::
  140. Only Godot 3.0 and later projects can be upgraded using the project
  141. conversion tool found in the Godot 4 editor.
  142. It's recommended to ensure that your project is up-to-date with the latest
  143. 3.x stable release before running the project upgrade tool.
  144. Fixing the project after running the project upgrade tool
  145. ---------------------------------------------------------
  146. After upgrading the project, you may notice that certain things don't look as
  147. they should. Scripts will likely contain various errors as well (possibly
  148. hundreds in large projects). This is because the project upgrade tool cannot
  149. cater to all situations. Therefore, a large part of the upgrade process remains
  150. manual.
  151. Automatically renamed nodes and resources
  152. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  153. The list below refers to nodes which were simply renamed for consistency or
  154. clarity in Godot 4.0. The project upgrade tool renames them automatically in
  155. your scripts.
  156. One noteworthy set of renames is 3D nodes, which all got a ``3D`` suffix added for
  157. consistency with their 2D counterparts. For example, ``Area`` is now ``Area3D``.
  158. For ease of searching, this table lists all nodes and resources that were renamed
  159. and are automatically converted, excluding the ones which only involved adding
  160. a ``3D`` suffix to the old name:
  161. +-----------------------------------------+-------------------------------------------+
  162. | Old name (Godot 3.x) | New name (Godot 4) |
  163. +=========================================+===========================================+
  164. | AnimatedSprite | AnimatedSprite2D |
  165. +-----------------------------------------+-------------------------------------------+
  166. | ARVRCamera | XRCamera3D |
  167. +-----------------------------------------+-------------------------------------------+
  168. | ARVRController | XRController3D |
  169. +-----------------------------------------+-------------------------------------------+
  170. | ARVRAnchor | XRAnchor3D |
  171. +-----------------------------------------+-------------------------------------------+
  172. | ARVRInterface | XRInterface |
  173. +-----------------------------------------+-------------------------------------------+
  174. | ARVROrigin | XROrigin3D |
  175. +-----------------------------------------+-------------------------------------------+
  176. | ARVRPositionalTracker | XRPositionalTracker |
  177. +-----------------------------------------+-------------------------------------------+
  178. | ARVRServer | XRServer |
  179. +-----------------------------------------+-------------------------------------------+
  180. | BoxShape | BoxShape3D |
  181. +-----------------------------------------+-------------------------------------------+
  182. | CapsuleShape | CapsuleShape3D |
  183. +-----------------------------------------+-------------------------------------------+
  184. | CubeMesh | BoxMesh |
  185. +-----------------------------------------+-------------------------------------------+
  186. | EditorSpatialGizmo | EditorNode3DGizmo |
  187. +-----------------------------------------+-------------------------------------------+
  188. | EditorSpatialGizmoPlugin | EditorNode3DGizmoPlugin |
  189. +-----------------------------------------+-------------------------------------------+
  190. | GIProbe | VoxelGI |
  191. +-----------------------------------------+-------------------------------------------+
  192. | GIProbeData | VoxelGIData |
  193. +-----------------------------------------+-------------------------------------------+
  194. | GradientTexture | GradientTexture1D |
  195. +-----------------------------------------+-------------------------------------------+
  196. | KinematicBody | CharacterBody3D |
  197. +-----------------------------------------+-------------------------------------------+
  198. | KinematicBody2D | CharacterBody2D |
  199. +-----------------------------------------+-------------------------------------------+
  200. | Light2D | PointLight2D |
  201. +-----------------------------------------+-------------------------------------------+
  202. | LineShape2D | WorldBoundaryShape2D |
  203. +-----------------------------------------+-------------------------------------------+
  204. | Listener | AudioListener3D |
  205. +-----------------------------------------+-------------------------------------------+
  206. | NavigationMeshInstance | NavigationRegion3D |
  207. +-----------------------------------------+-------------------------------------------+
  208. | NavigationPolygonInstance | NavigationRegion2D |
  209. +-----------------------------------------+-------------------------------------------+
  210. | Navigation2DServer | NavigationServer2D |
  211. +-----------------------------------------+-------------------------------------------+
  212. | PanoramaSky | Sky |
  213. +-----------------------------------------+-------------------------------------------+
  214. | Particles | GPUParticles3D |
  215. +-----------------------------------------+-------------------------------------------+
  216. | Particles2D | GPUParticles2D |
  217. +-----------------------------------------+-------------------------------------------+
  218. | ParticlesMaterial | ParticleProcessMaterial |
  219. +-----------------------------------------+-------------------------------------------+
  220. | Physics2DDirectBodyState | PhysicsDirectBodyState2D |
  221. +-----------------------------------------+-------------------------------------------+
  222. | Physics2DDirectSpaceState | PhysicsDirectSpaceState2D |
  223. +-----------------------------------------+-------------------------------------------+
  224. | Physics2DServer | PhysicsServer2D |
  225. +-----------------------------------------+-------------------------------------------+
  226. | Physics2DShapeQueryParameters | PhysicsShapeQueryParameters2D |
  227. +-----------------------------------------+-------------------------------------------+
  228. | Physics2DTestMotionResult | PhysicsTestMotionResult2D |
  229. +-----------------------------------------+-------------------------------------------+
  230. | PlaneShape | WorldBoundaryShape3D |
  231. +-----------------------------------------+-------------------------------------------+
  232. | Position2D | Marker2D |
  233. +-----------------------------------------+-------------------------------------------+
  234. | Position3D | Marker3D |
  235. +-----------------------------------------+-------------------------------------------+
  236. | ProceduralSky | Sky |
  237. +-----------------------------------------+-------------------------------------------+
  238. | RayShape | SeparationRayShape3D |
  239. +-----------------------------------------+-------------------------------------------+
  240. | RayShape2D | SeparationRayShape2D |
  241. +-----------------------------------------+-------------------------------------------+
  242. | ShortCut | Shortcut |
  243. +-----------------------------------------+-------------------------------------------+
  244. | Spatial | Node3D |
  245. +-----------------------------------------+-------------------------------------------+
  246. | SpatialGizmo | Node3DGizmo |
  247. +-----------------------------------------+-------------------------------------------+
  248. | SpatialMaterial | StandardMaterial3D |
  249. +-----------------------------------------+-------------------------------------------+
  250. | Sprite | Sprite2D |
  251. +-----------------------------------------+-------------------------------------------+
  252. | StreamTexture | CompressedTexture2D |
  253. +-----------------------------------------+-------------------------------------------+
  254. | TextureProgress | TextureProgressBar |
  255. +-----------------------------------------+-------------------------------------------+
  256. | VideoPlayer | VideoStreamPlayer |
  257. +-----------------------------------------+-------------------------------------------+
  258. | ViewportContainer | SubViewportContainer |
  259. +-----------------------------------------+-------------------------------------------+
  260. | Viewport | SubViewport |
  261. +-----------------------------------------+-------------------------------------------+
  262. | VisibilityEnabler | VisibleOnScreenEnabler3D |
  263. +-----------------------------------------+-------------------------------------------+
  264. | VisibilityNotifier | VisibleOnScreenNotifier3D |
  265. +-----------------------------------------+-------------------------------------------+
  266. | VisibilityNotifier2D | VisibleOnScreenNotifier2D |
  267. +-----------------------------------------+-------------------------------------------+
  268. | VisibilityNotifier3D | VisibleOnScreenNotifier3D |
  269. +-----------------------------------------+-------------------------------------------+
  270. | VisualServer | RenderingServer |
  271. +-----------------------------------------+-------------------------------------------+
  272. | VisualShaderNodeScalarConstant | VisualShaderNodeFloatConstant |
  273. +-----------------------------------------+-------------------------------------------+
  274. | VisualShaderNodeScalarFunc | VisualShaderNodeFloatFunc |
  275. +-----------------------------------------+-------------------------------------------+
  276. | VisualShaderNodeScalarOp | VisualShaderNodeFloatOp |
  277. +-----------------------------------------+-------------------------------------------+
  278. | VisualShaderNodeScalarClamp | VisualShaderNodeClamp |
  279. +-----------------------------------------+-------------------------------------------+
  280. | VisualShaderNodeVectorClamp | VisualShaderNodeClamp |
  281. +-----------------------------------------+-------------------------------------------+
  282. | VisualShaderNodeScalarInterp | VisualShaderNodeMix |
  283. +-----------------------------------------+-------------------------------------------+
  284. | VisualShaderNodeVectorInterp | VisualShaderNodeMix |
  285. +-----------------------------------------+-------------------------------------------+
  286. | VisualShaderNodeVectorScalarMix | VisualShaderNodeMix |
  287. +-----------------------------------------+-------------------------------------------+
  288. | VisualShaderNodeScalarSmoothStep | VisualShaderNodeSmoothStep |
  289. +-----------------------------------------+-------------------------------------------+
  290. | VisualShaderNodeVectorSmoothStep | VisualShaderNodeSmoothStep |
  291. +-----------------------------------------+-------------------------------------------+
  292. | VisualShaderNodeVectorScalarSmoothStep | VisualShaderNodeSmoothStep |
  293. +-----------------------------------------+-------------------------------------------+
  294. | VisualShaderNodeVectorScalarStep | VisualShaderNodeStep |
  295. +-----------------------------------------+-------------------------------------------+
  296. | VisualShaderNodeScalarSwitch | VisualShaderNodeSwitch |
  297. +-----------------------------------------+-------------------------------------------+
  298. | VisualShaderNodeScalarTransformMult | VisualShaderNodeTransformOp |
  299. +-----------------------------------------+-------------------------------------------+
  300. | VisualShaderNodeScalarDerivativeFunc | VisualShaderNodeDerivativeFunc |
  301. +-----------------------------------------+-------------------------------------------+
  302. | VisualShaderNodeVectorDerivativeFunc | VisualShaderNodeDerivativeFunc |
  303. +-----------------------------------------+-------------------------------------------+
  304. | VisualShaderNodeBooleanUniform | VisualShaderNodeBooleanParameter |
  305. +-----------------------------------------+-------------------------------------------+
  306. | VisualShaderNodeColorUniform | VisualShaderNodeColorParameter |
  307. +-----------------------------------------+-------------------------------------------+
  308. | VisualShaderNodeScalarUniform | VisualShaderNodeFloatParameter |
  309. +-----------------------------------------+-------------------------------------------+
  310. | VisualShaderNodeCubeMapUniform | VisualShaderNodeCubeMapParameter |
  311. +-----------------------------------------+-------------------------------------------+
  312. | VisualShaderNodeTextureUniform | VisualShaderNodeTexture2DParameter |
  313. +-----------------------------------------+-------------------------------------------+
  314. | VisualShaderNodeTextureUniformTriplanar | VisualShaderNodeTextureParameterTriplanar |
  315. +-----------------------------------------+-------------------------------------------+
  316. | VisualShaderNodeTransformUniform | VisualShaderNodeTransformParameter |
  317. +-----------------------------------------+-------------------------------------------+
  318. | VisualShaderNodeVec3Uniform | VisualShaderNodeVec3Parameter |
  319. +-----------------------------------------+-------------------------------------------+
  320. | VisualShaderNodeUniform | VisualShaderNodeParameter |
  321. +-----------------------------------------+-------------------------------------------+
  322. | VisualShaderNodeUniformRef | VisualShaderNodeParameterRef |
  323. +-----------------------------------------+-------------------------------------------+
  324. .. _doc_upgrading_to_godot_4_manual_rename:
  325. Manually renaming methods, properties, signals and constants
  326. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  327. Due to how the project upgrade tool works, not all
  328. :abbr:`API (Application Programming Interface)` renames can be performed automatically.
  329. The list below contains all renames that must be performed manually using the script editor.
  330. If you cannot find a node or resource in the list below, refer to the above
  331. table to find its new name.
  332. .. tip::
  333. You can use the **Replace in Files** dialog to speed up replacement by pressing
  334. :kbd:`Ctrl + Shift + R` while the script editor is open. However, be careful
  335. as the Replace in Files dialog doesn't offer any way to undo a replacement.
  336. Use version control to commit your upgrade work regularly.
  337. Command line tools such as `sd <https://github.com/chmln/sd>`__ can also be used
  338. if you need something more flexible than the editor's Replace in Files dialog.
  339. If using C#, remember to search for outdated API usage with PascalCase
  340. notation in the project (and perform the replacement with PascalCase
  341. notation).
  342. **Methods**
  343. - File and Directory classes were replaced by :ref:`class_FileAccess` and
  344. :ref:`class_DirAccess`, which have an entirely different API. Several methods
  345. are now static, which means you can call them directly on FileAccess or
  346. DirAccess without having to create an instance of that class.
  347. - Screen and window-related methods from the :ref:`class_OS` singleton (such as
  348. ``OS.get_screen_size()``) were moved to the :ref:`class_DisplayServer` singleton.
  349. Method naming was also changed to use the
  350. ``DisplayServer.<object>_<get/set>_property()`` form instead. For example,
  351. ``OS.get_screen_size()`` becomes ``DisplayServer.screen_get_size()``.
  352. - Time and date methods from the :ref:`class_OS` singleton were moved to the
  353. :ref:`class_Time` singleton.
  354. (The Time singleton is also available in Godot 3.5 and later.)
  355. - You may have to replace some ``instance()`` calls with ``instantiate()``. The
  356. converter *should* handle this automatically, but this relies on custom code that
  357. may not work in 100% of situations.
  358. - AcceptDialog's ``set_autowrap()`` is now ``set_autowrap_mode()``.
  359. - AnimationNode's ``process()`` is now ``_process()``
  360. (note the leading underscore, which denotes a virtual method).
  361. - AnimationPlayer's ``add_animation()`` is now ``add_animation_library()`` and now uses an :ref:`class_AnimationLibrary`.
  362. - AnimationTree's ``set_process_mode()`` is now ``set_process_callback()``.
  363. - Array's ``empty()`` is now ``is_empty()``.
  364. - Array's ``invert()`` is now ``reverse()``.
  365. - Array's ``remove()`` is now ``remove_at()``.
  366. - AStar2D and AStar3D's ``get_points()`` is now ``get_points_id()``.
  367. - BaseButton's ``set_event()`` is now ``set_shortcut()``.
  368. - Camera2D's ``get_h_offset()`` is now ``get_drag_horizontal_offset()``.
  369. - Camera2D's ``get_v_offset()`` is now ``get_drag_vertical_offset()``.
  370. - Camera2D's ``set_h_offset()`` is now ``set_drag_horizontal_offset()``.
  371. - Camera2D's ``set_v_offset()`` is now ``set_drag_vertical_offset()``.
  372. - CanvasItem's ``raise()`` is now ``move_to_front()``.
  373. - CanvasItem's ``update()`` is now ``queue_redraw()``.
  374. - Control's ``get_stylebox()`` is now ``get_theme_stylebox()``.
  375. - Control's ``set_tooltip()`` is now ``set_tooltip_text()``.
  376. - EditorNode3DGizmoPlugin's ``create_gizmo()`` is now ``_create_gizmo()``
  377. (note the leading underscore, which denotes a virtual method).
  378. - ENetMultiplayerPeer's ``get_peer_port()`` is now ``get_peer()``.
  379. - FileDialog's ``get_mode()`` is now ``get_file_mode()``.
  380. - FileDialog's ``set_mode()`` is now ``set_file_mode()``.
  381. - GraphNode's ``get_offset()`` is now ``get_position_offset()``.
  382. - GridMap's ``map_to_world()`` is now ``map_to_local()``.
  383. - GridMap's ``world_to_map()`` is now ``local_to_map()``.
  384. - Image's ``get_rect()`` is now ``get_region()``.
  385. - ImmediateGeometry's ``set_normal()`` is now ``surface_set_normal()``.
  386. - ImmediateMesh's ``set_color()`` is now ``surface_set_color()``.
  387. - ImmediateMesh's ``set_uv()`` is now ``surface_set_uv()``.
  388. - ItemList's ``get_v_scroll()`` is now ``get_v_scroll_bar()``.
  389. - MultiPlayerAPI's ``get_network_connected_peers()`` is now ``get_peers()``.
  390. - MultiPlayerAPI's ``get_network_peer()`` is now ``get_peer()``.
  391. - MultiPlayerAPI's ``get_network_unique_id()`` is now ``get_unique_id()``.
  392. - MultiPlayerAPI's ``has_network_peer()`` is now ``has_multiplayer_peer()``.
  393. - MultiplayerAPI's ``is_refusing_new_network_connections()`` is now ``is_refusing_new_connections()``.
  394. - PacketPeerUDP's ``is_listening()`` is now ``is_bound()``.
  395. - PacketPeerUDP's ``listen()`` is now ``bind()``.
  396. - ParticleProcessMaterial's ``set_flag()`` is now ``set_particle_flag()``.
  397. - PhysicsTestMotionResult2D's ``get_motion()`` is now ``get_travel()``.
  398. - RenderingServer's ``get_render_info()`` is now ``get_rendering_info()``.
  399. - ResourceFormatLoader's ``get_dependencies()`` is now ``_get_dependencies()``
  400. (note the leading underscore, which denotes a virtual method).
  401. - ResourceFormatLoader's ``load()`` is now ``_load()``.
  402. - SceneTree's ``change_scene()`` is now ``change_scene_to_file()``.
  403. - Shortcut's ``is_valid()`` is now ``has_valid_event()``.
  404. - TileMap's ``map_to_world()`` is now ``map_to_local()``.
  405. - TileMap's ``world_to_map()`` is now ``local_to_map()``.
  406. - Transform2D's ``xform()`` is ``mat * vec`` and ``xform_inv()`` is ``vec * mat``.
  407. - XRPositionalTracker's ``get_name()`` is now ``get_tracker_name()``.
  408. - XRPositionalTracker's ``get_type()`` is now ``get_tracker_type()``.
  409. - XRPositionalTracker's ``_set_name()`` is now ``get_tracker_name()``.
  410. **Properties**
  411. .. note::
  412. If a property is listed here, its associated getter and setter methods must
  413. also be renamed manually if used in the project. For example, PathFollow2D
  414. and PathFollow3D's ``set_offset()`` and ``get_offset()`` must be renamed to
  415. ``set_progress()`` and ``get_progress()`` respectively.
  416. - AudioServer's ``device`` is now ``output_device``.
  417. - BaseButton's ``group`` is now ``button_group``.
  418. - Camera3D's ``zfar`` is now ``far``.
  419. - Camera3D's ``znear`` is now ``near``
  420. - Control's ``margin`` is now ``offset``.
  421. - InputEventMouseButton's ``doubleclick`` is now ``double_click``.
  422. - InputEventWithModifiers's ``alt`` is now ``alt_pressed``.
  423. - InputEventWithModifiers's ``command`` is now ``command_pressed``.
  424. - InputEventWithModifiers's ``control`` is now ``ctrl_pressed``.
  425. - InputEventWithModifiers's ``meta`` is now ``meta_pressed``.
  426. - InputEventWithModifiers's ``shift`` is now ``shift_pressed``.
  427. - Label's ``percent_visible`` is now ``visible_ratio``.
  428. - MultiPlayerAPI's ``refuse_new_network_connections`` is now ``refuse_new_connections``.
  429. - Node's ``filename`` is now ``scene_file_path``.
  430. - PathFollow2D's ``rotate`` is now ``rotates``.
  431. - PathFollow2D and PathFollow3D's ``offset`` is now ``progress``.
  432. - RectangleShape2D's ``extents`` is now ``size``
  433. - TextureProgressBar's ``percent_visible`` is now ``show_percentage``.
  434. - Theme's ``off`` is now ``unchecked``.
  435. - Theme's ``ofs`` is now ``offset``.
  436. - Theme's ``on`` is now ``checked``.
  437. - Window's ``window_title`` is now ``title``.
  438. - WorldMarginShape2D's ``d`` is now ``distance``.
  439. - The ``extents`` property on CSG nodes and VoxelGI will have to be replaced
  440. with ``size``, with the set value halved (as they're no longer half-extents).
  441. This also affects its setter/getter methods ``set_extents()`` and
  442. ``get_extents()``.
  443. - The ``Engine.editor_hint`` property was removed in favor of the
  444. ``Engine.is_editor_hint()`` *method*. This is because it's read-only, and
  445. properties in Godot are not used for read-only values.
  446. **Enums**
  447. - CPUParticles2D's ``FLAG_MAX`` is now ``PARTICLE_FLAG_MAX``.
  448. **Signals**
  449. - FileSystemDock's ``instantiate`` is now ``instance``.
  450. - CanvasItem's ``hide`` is now ``hidden``. This rename does **not** apply to the
  451. ``hide()`` method, only the signal.
  452. - Tween's ``tween_all_completed`` is now ``loop_finished``.
  453. - EditorSettings' ``changed`` is now ``settings_changed``.
  454. **Constants**
  455. - Color names are now uppercase and use underscores between words.
  456. For example, ``Color.palegreen`` is now ``Color.PALE_GREEN``.
  457. - MainLoop's ``NOTIFICATION_`` constants were duplicated to ``Node`` which means
  458. you can remove the ``MainLoop.`` prefix when referencing them.
  459. - MainLoop's ``NOTIFICATION_WM_QUIT_REQUEST`` is now ``NOTIFICATION_WM_CLOSE_REQUEST``.
  460. Checking project settings
  461. ~~~~~~~~~~~~~~~~~~~~~~~~~
  462. Several project settings were renamed, and some of them had their enums changed
  463. in incompatible ways (such as shadow filter quality). This means you may need to
  464. set some project settings' values again. Make sure the **Advanced** toggle is
  465. enabled in the project settings dialog so you can see all project settings.
  466. Checking Environment settings
  467. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  468. Graphics quality settings were moved from Environment properties to project
  469. settings. This was done to make runtime quality adjustments easier, without
  470. having to access the currently active Environment resource then modify its
  471. properties.
  472. As a result, you will have to configure Environment quality settings in the
  473. project settings as old Environment quality settings aren't converted
  474. automatically to project settings.
  475. If you have a graphics settings menu that changed environment properties in
  476. Godot 3.x, you will have to change its code to call :ref:`class_RenderingServer`
  477. methods that affect environment effects' quality. Only the "base" toggle of each
  478. environment effect and its visual knobs remain within the Environment resource.
  479. Updating shaders
  480. ~~~~~~~~~~~~~~~~
  481. There have been some changes to shaders that aren't covered by the upgrade tool.
  482. You will need to make some manual changes, especially if your shader uses coordinate
  483. space transformations or a custom ``light()`` function.
  484. The ``.shader`` file extension is no longer supported, which means you must
  485. rename ``.shader`` files to ``.gdshader`` and update references accordingly in
  486. scene/resource files using an external text editor.
  487. Some notable changes you will need to perform in shaders are:
  488. - Texture filter and repeat modes are now set on individual uniforms, rather
  489. than the texture files themselves.
  490. - ``hint_albedo`` is now ``source_color``.
  491. - ``hint_color`` is now ``source_color``.
  492. - :ref:`Built in matrix variables were renamed. <doc_spatial_shader>`
  493. - Particles shaders no longer use the ``vertex()`` processor function. Instead
  494. they use ``start()`` and ``process()``.
  495. - In the Forward+ and Mobile renderers, normalized device coordinates now have a Z-range of ``[0.0,1.0]``
  496. instead of ``[-1.0,1.0]``. When reconstructing NDC from ``SCREEN_UV`` and depth, use
  497. ``vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth);`` instead of
  498. ``vec3 ndc = vec3(SCREEN_UV, depth) * 2.0 - 1.0;``. The Compatibility renderer is unchanged,
  499. using the same NDC Z-range as 3.x.
  500. - The lighting model changed. If your shader has a custom ``light()`` function,
  501. you may need to make changes to get the same visual result.
  502. - In 4.3 and up, the reverse Z depth buffer technique is now implemented, which
  503. may break advanced shaders. See
  504. `Introducing Reverse Z (AKA I'm sorry for breaking your shader) <https://godotengine.org/article/introducing-reverse-z/>`__.
  505. See :ref:`doc_shading_language` for more information.
  506. This list is not exhaustive. If you made all the changes mentioned here and your
  507. shader still doesn't work, try asking for help in one of the `community channels <https://godotengine.org/community/>`__.
  508. Updating scripts to take backwards-incompatible changes into account
  509. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  510. Some changes performed between Godot 3.x and 4 are not renames, but they still
  511. break backwards compatibility due to different default behavior.
  512. The most notable examples of this are:
  513. - Lifecycle functions such as ``_ready()`` and ``_process()`` no longer
  514. implicitly call parent classes' functions that have the same name. Instead,
  515. you must use ``super()`` at the top of a lifecycle function in the child class
  516. so that the parent class function is called first.
  517. - Both :ref:`class_String` and :ref:`class_StringName` are now exposed to
  518. GDScript. This allows for greater optimization, as StringName is specifically
  519. designed to be used for "constant" strings that are created once and reused
  520. many times. These types are not strictly equivalent to each other, which means
  521. ``is_same("example", &"example")`` returns ``false``. Although in most cases
  522. they are interchangeable (``"example" == &"example"`` returns ``true``),
  523. sometimes you may have to replace ``"example"`` with ``&"example"``.
  524. - :ref:`GDScript setter and getter syntax <doc_gdscript_basics_setters_getters>`
  525. was changed, but it's only partially converted by the conversion tool. In most
  526. cases, manual changes are required to make setters and getters working again.
  527. - :ref:`GDScript signal connection syntax <doc_gdscript_signals>` was changed.
  528. The conversion tool will use the string-based syntax which is still present in
  529. Godot 4, but it's recommended to switch to the :ref:`class_Signal`-based syntax
  530. described on the linked page. This way, strings are no longer involved,
  531. which avoids issues with signal name errors that can only be discovered at runtime.
  532. - Built-in scripts that are :ref:`tool scripts <doc_running_code_in_the_editor>`
  533. do not get the ``tool`` keyword converted to the ``@tool`` annotation.
  534. - The Tween node was removed in favor of Tweeners, which are also available in
  535. Godot 3.5 and later. See the
  536. `original pull request <https://github.com/godotengine/godot/pull/41794>`__
  537. for details.
  538. - ``randomize()`` is now automatically called on project load, so deterministic
  539. randomness with the global RandomNumberGenerate instance requires manually
  540. setting a seed in a script's ``_ready()`` function.
  541. - ``call_group()``, ``set_group()`` and ``notify_group()`` are now immediate by
  542. default. If calling an expensive function, this may result in stuttering when
  543. used on a group containing a large number of nodes. To use deferred calls like
  544. before, replace ``call_group(...)`` with
  545. ``call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)`` (and do the same with
  546. ``set_group()`` and ``notify_group()`` respectively).
  547. - Instead of ``rotation_degrees``, the ``rotation`` property is exposed to the
  548. editor, which is automatically displayed as degrees in the Inspector
  549. dock. This may break animations, as the conversion is not handled automatically by the
  550. conversion tool.
  551. - :ref:`class_AABB`'s ``has_no_surface()`` was inverted and renamed to ``has_surface()``.
  552. - :ref:`class_AABB` and :ref:`class_Rect2`'s ``has_no_area()`` was inverted and
  553. renamed to ``has_area()``.
  554. - :ref:`class_AnimatedTexture`'s ``fps`` property was replaced by ``speed_scale``,
  555. which works the same as AnimationPlayer's ``playback_speed`` property.
  556. - :ref:`class_AnimatedSprite2D` and :ref:`class_AnimatedSprite3D` now allow
  557. negative ``speed_scale`` values. This may break animations if you relied on
  558. ``speed_scale`` being internally clamped to ``0.0``.
  559. - :ref:`class_AnimatedSprite2D` and :ref:`class_AnimatedSprite3D`'s ``playing``
  560. property was removed. Use ``play()``/``stop()`` method instead OR configure
  561. ``autoplay`` animation via the SpriteFrames bottom panel (but not both at once).
  562. - :ref:`class_Array`'s ``slice()`` second parameter (``end``) is now *exclusive*,
  563. instead of being inclusive. For example, this means that
  564. ``[1, 2, 3].slice(0, 1)`` now returns ``[1]`` instead of ``[1, 2]``.
  565. - :ref:`class_BaseButton`'s signals are now ``button_up`` and ``button_down``.
  566. The ``pressed`` property is now ``button_pressed``.
  567. - :ref:`class_Camera2D`'s ``rotating`` property was replaced by
  568. ``ignore_rotation``, which has inverted behavior.
  569. - Camera2D's ``zoom`` property was inverted: higher values are now more zoomed
  570. in, instead of less.
  571. - :ref:`class_Node`'s ``remove_and_skip()`` method was removed.
  572. If you need to reimplement it in a script, you can use the
  573. `old C++ implementation <https://github.com/godotengine/godot/blob/7936b3cc4c657e4b273b376068f095e1e0e4d82a/scene/main/node.cpp#L1910-L1945>`__
  574. as a reference.
  575. - ``OS.get_system_time_secs()`` should be converted to
  576. ``Time.get_time_dict_from_system()["second"]``.
  577. - :ref:`class_ResourceSaver`'s ``save()`` method now has its arguments swapped around
  578. (``resource: Resource, path: String``). This also applies to
  579. :ref:`class_ResourceFormatSaver`'s ``_save()`` method.
  580. - A :ref:`class_StreamPeerTCP` must have ``poll()`` called on it to update its
  581. state, instead of relying on ``get_status()`` automatically polling:
  582. `GH-59582 <https://github.com/godotengine/godot/pull/59582>`__
  583. - :ref:`class_String`'s ``right()`` method `has changed behavior <https://github.com/godotengine/godot/pull/36180>`__:
  584. it now returns a number of characters from the right of the string, rather than
  585. the right side of the string from a given position. If you need the old behavior,
  586. you can use ``substr()`` instead.
  587. - ``is_connected_to_host()`` was removed from StreamPeerTCP and PacketPeerUDP as
  588. per `GH-59582 <https://github.com/godotengine/godot/pull/59582>`__.
  589. ``get_status()`` can be used in StreamPeerTCP instead.
  590. ``is_socket_connected()`` can be used in :ref:`class_PacketPeerUDP` instead.
  591. - In ``_get_property_list()``, the ``or_lesser`` property hint string is now ``or_less``.
  592. - In ``_get_property_list()``, the ``noslider`` property hint string is now ``no_slider``.
  593. - VisualShaderNodeVec4Parameter now takes a :ref:`class_Vector4` as parameter
  594. instead of a :ref:`class_Quaternion`.
  595. **Removed or replaced nodes/resources**
  596. This lists all nodes that were replaced by another node requiring different
  597. configuration. The setup must be done from scratch again, as the project
  598. converter doesn't support updating existing setups:
  599. +---------------------+-----------------------+----------------------------------------------------------------------------+
  600. | Removed node | Closest approximation | Comment |
  601. +=====================+=======================+============================================================================+
  602. | AnimationTreePlayer | AnimationTree | AnimationTreePlayer was deprecated since Godot 3.1. |
  603. +---------------------+-----------------------+----------------------------------------------------------------------------+
  604. | BakedLightmap | LightmapGI | See :ref:`doc_using_lightmap_gi`. |
  605. +---------------------+-----------------------+ |
  606. | BakedLightmapData | LightmapGIData | |
  607. +---------------------+-----------------------+----------------------------------------------------------------------------+
  608. | BitmapFont | FontFile | See :ref:`doc_gui_using_fonts`. |
  609. +---------------------+-----------------------+ |
  610. | DynamicFont | FontFile | |
  611. +---------------------+-----------------------+ |
  612. | DynamicFontData | FontFile | |
  613. +---------------------+-----------------------+----------------------------------------------------------------------------+
  614. | ClippedCamera | Camera2D or Camera3D | Camera's pyramid shape was moved to :ref:'class_Camera3D'. |
  615. +---------------------+-----------------------+ |
  616. | InterpolatedCamera | Camera2D or Camera3D | |
  617. +---------------------+-----------------------+----------------------------------------------------------------------------+
  618. | Navigation2D | Node2D | Replaced by :ref:`other 2D Navigation nodes <doc_navigation_overview_2d>`. |
  619. +---------------------+-----------------------+----------------------------------------------------------------------------+
  620. | Navigation3D | Node3D | Replaced by :ref:`other 3D Navigation nodes <doc_navigation_overview_3d>`. |
  621. +---------------------+-----------------------+----------------------------------------------------------------------------+
  622. | OpenSimplexNoise | FastNoiseLite | Has different parameters and more noise types such as cellular. No |
  623. | | | support for 4D noise as it's absent from the FastNoiseLite library. |
  624. +---------------------+-----------------------+----------------------------------------------------------------------------+
  625. | ToolButton | Button | ToolButton was Button with the **Flat** property enabled by default. |
  626. +---------------------+-----------------------+----------------------------------------------------------------------------+
  627. | YSort | Node2D or Control | CanvasItem has a new **Y Sort Enabled** property in 4.0. |
  628. +---------------------+-----------------------+----------------------------------------------------------------------------+
  629. | ProximityGroup | Node3D | :ref:`class_VisibleOnScreenNotifier3D` can act as a replacement. |
  630. +---------------------+-----------------------+----------------------------------------------------------------------------+
  631. | Portal | Node3D | Portal and room occlusion culling was replaced by raster |
  632. | | | :ref:`occlusion culling <doc_occlusion_culling>` |
  633. | | | (OccluderInstance3D node), which requires a different setup process. |
  634. +---------------------+-----------------------+ |
  635. | Room | Node3D | |
  636. +---------------------+-----------------------+ |
  637. | RoomManager | Node3D | |
  638. +---------------------+-----------------------+ |
  639. | RoomGroup | Node3D | |
  640. +---------------------+-----------------------+----------------------------------------------------------------------------+
  641. | Occluder | Node3D | Geometry occlusion culling was replaced by raster |
  642. | | | :ref:`occlusion culling <doc_occlusion_culling>` |
  643. | | | (OccluderInstance3D node), which requires a different setup process. |
  644. +---------------------+-----------------------+ |
  645. | OccluderShapeSphere | Resource | |
  646. +---------------------+-----------------------+----------------------------------------------------------------------------+
  647. If loading an old project, the node will be replaced with its
  648. *Closest approximation* automatically (even if not using the project upgrade tool).
  649. **Threading changes**
  650. :ref:`Threading <doc_using_multiple_threads>` APIs have changed in 4.0. For
  651. example, the following code snippet in Godot 3.x must be modified to work in 4.0:
  652. ::
  653. # 3.x
  654. var start_success = new_thread.start(self, "__threaded_background_loader",
  655. [resource_path, thread_num]
  656. )
  657. # 4.0
  658. var start_success = new_thread.start(__threaded_background_loader.bind(resource_path, thread_num))
  659. ``Thread.is_active()`` is no longer used and should be converted to ``Thread.is_alive()``.
  660. .. seealso::
  661. See the `changelog <https://github.com/godotengine/godot/blob/master/CHANGELOG.md>`__
  662. for a full list of changes between Godot 3.x and 4.
  663. ArrayMesh resource compatibility breakage
  664. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  665. If you've saved an ArrayMesh resource to a ``.res`` or ``.tres`` file, the
  666. format used in 4.0 is not compatible with the one used in 3.x. You will need to
  667. go through the process of importing the source mesh file and saving it as an
  668. ArrayMesh resource again.
  669. List of automatically renamed methods, properties, signals and constants
  670. ------------------------------------------------------------------------
  671. The `editor/renames_map_3_to_4.cpp <https://github.com/godotengine/godot/blob/master/editor/renames_map_3_to_4.cpp>`__
  672. source file lists all automatic renames performed by the project upgrade tool.
  673. Lines that are commented out refer to API renames that :ref:`cannot be performed automatically <doc_upgrading_to_godot_4_manual_rename>`.
  674. Porting editor settings
  675. -----------------------
  676. Godot 3.x and 4.0 use different editor settings files. This means their settings
  677. can be changed independently from each other.
  678. If you wish to port over your Godot 3.x settings to Godot 4, open the
  679. :ref:`editor settings folder <doc_data_paths_editor_data_paths>` and copy
  680. ``editor_settings-3.tres`` to ``editor_settings-4.tres`` while the Godot 4
  681. editor is closed.
  682. .. note::
  683. Many settings' names and categories have changed since Godot 3.x. Editor settings
  684. whose name or category has changed won't carry over to Godot 4.0; you will
  685. have to set their values again.