Up to date
This page is up to date for Godot 4.3.
If you still find outdated information, please open an issue.
Mise à niveau de Godot 3 à Godot 4
Devrais-je passer à Godot 4 ?
Avant de commencer le processus de mise à niveau, il vaut la peine de penser aux avantages et aux inconvénients que la mise à niveau apporterait à votre projet.
Avantages de la mise à niveau
Avec les nouvelles fonctionnalités présentes en 4.0, mettre à jour donne les avantages suivants :
Beaucoup de bugs sont corrigés en 4.0, mais ne peuvent être résolus en 3.x pour diverses raisons (comme les différences graphiques de l'API ou la rétrocompatibilité).
4.x profitera d'une plus longue période de support . Godot 3.x continuera à être supporté pendant un certain temps après que la 4.0 soit sortie, mais il cessera ultérieurement de recevoir du support.
Voir Changelog de la documentation pour une liste de pages documentant les nouvelles fonctionnalités dans Godot 4.0.
Désavantages de la mise à niveau
Si vous n'avez pas besoin des caractéristiques présentes dans Godot 4.0, vous pouvez vouloir rester sur Godot 3.x pour les raisons suivantes :
Godot 3.x est testé et éprouvé, tandis que Godot 4 reste dans ses premières étapes.
Godot 4.0 devrait contenir des problèmes de flux de travail et de performance que Godot 3.x n'a pas. Ces problèmes seront réglés au cours du temps avec les futures versions de Godot 4.x.
Godot 4 a moins de tutoriels tiers disponibles par rapport à Godot 3.x. Si vous êtes nouveau aux moteurs de jeu, vous pouvez en conséquence avoir une meilleure expérience en utilisant Godot 3.x.
Les exigences matérielles de base de Godot 4 (comme l'utilisation de la mémoire) sont légèrement plus élevées, tant pour l'éditeur que pour les projets exportés. Cela était nécessaire pour la mise en œuvre de certaines optimisations de base.
Puisque Godot 4 comprend plus de fonctionnalités que Godot 3, la taille binaire de Godot 4 pour les projets exportés est plus grande. Alors que cela peut être atténué en optimisant la compilation par rapport à la taille, une compilation 4.0 avec un ensemble donné de modules activés restera plus grande par rapport à une compilation 3.x avec les mêmes modules. Cela peut être un problème lors de l'export vers le Web, car la taille binaire influence directement la rapidité avec laquelle le moteur peut s'initialiser (indépendamment de la vitesse de téléchargement).
Godot 4 n'a pas et n'aura pas de support pour le rendu GLES2. (Il y a encore du support pour le rendu GLES3 en utilisant le nouveau backend OpenGL, ce qui signifie que les appareils sans support Vulkan peuvent encore exécuter Godot 4.)
Si vous ciblez du très vieux matériel comme des graphiques intégrés Intel Sandy Bridge (2e génération), cela empêchera le projet de fonctionner sur ce matériel après la mise à niveau. Des implémentations logicielles d'OpenGL peut être utilisées pour contourner cette limite, mais ils sont trop lents pour le jeu.
Mise en garde concernant la mise à jour
Puisque Godot 4 est une réécriture complète dans de nombreux aspects, certaines fonctionnalités ont malheureusement été perdues dans le processus. Certaines de ces fonctionnalités pourront potentiellement être restaurées dans les futures versions de Godot :
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.
By default, rendering in 2D is no longer performed in HDR, which means "overbright" modulate values have no visible effect. Since Godot 4.2, you can enable the project setting HDR 2D to perform 2D rendering in HDR. See also Using glow in 2D.
Bien que le rendu se produit toujours en HDR en 3D lors de l'utilisation des backends Forward Plus ou Forward Mobile, Viewports ne peut dorénavant plus renvoyer de données HDR. Il est prévu de les restaurer dans le futur.
Mono a été remplacé par .NET 6. Cela signifie que l'exportation de projets C# vers Android, iOS et HTML5 n'est plus pris en charge pour le moment. Exporter des projets C# vers des plateformes de bureau est toujours supporté, et à partir de la 4.2, il y a un support expérimental pour l'exportation vers des plateformes mobiles. Le soutien à l'export de projets C# vers d'autres plateformes sera restauré dans les futures versions 4.x à mesure que le soutien en amont s'améliore.
Vous pouvez trouvez une liste plus complètes des régressions fonctionnelles en cherchant les problèmes labélisés "regression" mais pas "bug" sur GitHub.
Préparation du projet avant la mise à niveau (optionnel)
Si vous voulez être prêt à mettre à jour vers Godot 4 à l'avenir, envisagez d'utiliser Tweener et le singleton :ref:`class_Time`dans votre projet. Ces classes sont disponibles dans Godot 3.5 et les versions postérieures.
De cette façon, vous ne compterez pas sur le nœud Tween déprécié et les fonctions de temps OS, qui sont toutes deux supprimées dans Godot 4.0.
C'est aussi une bonne idée de renommer les shaders externes pour que leur extension soit .gdshader au lieu de .shader. Godot 3.x supporte les deux extensions, mais seulement .gdshader est supporté dans Godot 4.0.
Exécuter l'outil de mise à niveau du projet
Avertissement
Faites une sauvegarde complète de votre projet avant la mise à niveau ! L'outil de mise à niveau du projet ne va pas effectuer de sauvegarde du projet qui est mis à niveau.
Vous pouvez sauvegarder un projet en utilisant du contrôle de version, ou en copiant le dossier de projet vers un autre emplacement.
Utiliser le gestionnaire de projets
Pour utiliser l'outil de mise à jour du projet :
Ouvrez le gestionnaire de projets de Godot 4.
Importez le projet Godot 3.x en utilisant le bouton Import, ou utilisez le bouton Scan pour trouver le projet dans un dossier.
Double-cliquez sur le projet importé (ou sélectionnez le projet puis choisissez Éditer).
Vous verrez une fenêtre apparaissant avec deux options: Convertir project.godot seulement et Convertir le projet en entier. Après vous être assuré que votre projet est sauvegardé (voir l'avertissement ci-dessus), choisissez Convertir le projet en entier. Convertir project.godot seulement est destiné à être utilisé seulement pour les cas d'utilisation avancée, au cas où l'outil de conversion échoue.
Attendez que le processus de conversion du projet se termine. Cela peut prendre jusqu'à quelques minutes pour de grands projets avec beaucoup de scènes.
Lorsque l'interface du gestionnaire de projet est de nouveau disponible, double-cliquez sur le projet (ou sélectionnez le projet puis choisissez Éditer) pour l'ouvrir dans l'éditeur.
Si vous tombez sur des problèmes de conversion en raison de certains fichiers de projet qui sont trop grands ou longs, vous pouvez utiliser la ligne de commande pour mettre à niveau le projet (voir ci-dessous). Cela vous permettra de redéfinir les limites de taille du convertisseur.
Utilisation de la ligne de commande
Pour utiliser l'outil de mise à niveau du projet à partir de la ligne de commande, il est recommandé de valider la conversion du projet en exécutant le binaire de l'éditeur Godot avec les arguments suivants :
# [<max_file_kb>] [<max_line_size>] are optional arguments.
# Remove them if you aren't changing their values.
path/to/godot.binary --path /path/to/project/folder --validate-conversion-3to4 [<max_file_kb>] [<max_line_size>]
Si la liste des mises à niveau prévues vous semble bonne, exécutez la commande suivante sur le binaire de l'éditeur de Godot pour mettre à niveau les fichiers de projet :
# [<max_file_kb>] [<max_line_size>] are optional arguments.
# Remove them if you aren't changing their values.
path/to/godot.binary --path /path/to/project/folder --convert-3to4 [<max_file_kb>] [<max_line_size>]
[<max_file_kb>] and [<max_line_size>] are optional arguments to specify
the maximum size of files to be converted (in kilobytes and lines). The default
limits are 4 MB and 100,000 lines respectively. If a file hits either of those
limits, it will not be upgraded by the project converter. This is useful to
prevent large resources from slowing down the upgrade to a crawl.
Si vous voulez encore convertir de gros fichiers par l'outil de mise à niveau du projet, augmentez les limites de taille lors de l'exécution de l'outil de mise à niveau du projet. Par exemple, exécuter le binaire de l'éditeur Godot avec ces arguments augmente les deux limites par un facteur 10× :
path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000
Note
Seuls les projets Godot 3.0 et ultérieurs peuvent être mis à niveau en utilisant l'outil de conversion de projet disponible dans l'éditeur Godot 4.
Il est recommandé de s'assurer que votre projet est à jour avec la dernière version stable 3.x avant de lancer l'outil de mise à niveau du projet.
Corriger le projet après l’exécution de l'outil de mise à niveau de projet
Après avoir mis à niveau le projet, vous pouvez remarquer que certaines choses ne semblent pas comme elles devraient. Les scripts contiendront probablement aussi diverses erreurs (peut-être des centaines dans les grands projets). C'est parce que l'outil de mise à niveau du projet ne peut pas répondre à toutes les situations. Par conséquent, une grande partie du processus de mise à niveau reste manuelle.
Nœuds et ressources automatiquement renommés
La liste ci-dessous se réfère aux nœuds qui ont été simplement renommés pour la cohérence ou la clarté dans Godot 4.0. L'outil de mise à niveau de projet les renomme automatiquement dans vos scripts.
Un ensemble remarquable de renoms est celui des nœuds 3D, qui ont tous obtenu un suffixe 3D ajouté pour la cohérence avec leurs homologues 2D. Par exemple, Area est maintenant Area3D.
Pour faciliter la recherche, ce tableau énumère tous les nœuds et les ressources qui ont été renommés et sont automatiquement convertis, à l'exclusion de ceux qui ne concernaient que l'ajout d'un suffixe 3D à l'ancien nom :
Vieux nom (Godot 3.X) |
Nouveau nom (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 |
Auditeur |
AudioListener3D |
NavigationMeshInstance |
NavigationRegion3D |
NavigationPolygonInstance |
NavigationRegion2D |
Navigation2DServer |
NavigationServer2D |
PanoramaSky |
Ciel |
Particules |
GPUParticles3D |
Particles2D |
GPUParticles2D |
ParticlesMaterial |
ParticleProcessMaterial |
Physics2DDirectBodyState |
PhysicsDirectBodyState2D |
Physics2DDirectSpaceState |
PhysicsDirectSpaceState2D |
Physics2DServer |
PhysicsServer2D |
Physics2DShapeQueryParameters |
PhysicsShapeQueryParameters2D |
Physics2DTestMotionResult |
PhysicsTestMotionResult2D |
PlaneShape |
WorldBoundaryShape3D |
Position2D |
Marker2D |
Position3D |
Marker3D |
ProceduralSky |
Ciel |
RayShape |
SeparationRayShape3D |
RayShape2D |
SeparationRayShape2D |
Raccourci |
Raccourci |
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 |
Renommez manuellement les méthodes, propriétés, signaux et constantes
En raison de la façon dont l'outil de mise à niveau de projet fonctionne, tous les renommages d'API ne peuvent pas être exécutés automatiquement. La liste ci-dessous contient tous les renommages qui doivent être exécutés manuellement en utilisant l'éditeur de script.
Si vous ne trouvez pas un nœud ou une ressource dans la liste ci-dessous, reportez-vous au tableau ci-dessus pour trouver son nouveau nom.
Astuce
Vous pouvez utiliser la fenêtre Remplacer dans les fichiers pour accélérer le remplacement en appuyant sur :kbd:` Ctrl + Shift + R` pendant que l'éditeur de script est ouvert. Cependant, soyez prudent car la fenêtre "Remplacer dans les fichiers" n'offre aucun moyen de défaire un remplacement. Utilisez du contrôle de version pour sauvegarder votre travail de mise à niveau régulièrement. Des outils de ligne de commande tels que sd peuvent également être utilisés si vous avez besoin de quelque chose de plus flexible que le fenêtre "Remplacer dans les fichiers" de l'éditeur.
Si vous utilisez du C#, n'oubliez pas de rechercher l'utilisation de l'API périmée avec la notation en PascalCase dans le projet (et effectuez le remplacement avec la notation en PascalCase).
Méthodes
Les classes File et Directory ont été remplacées par FileAccess et DirAccess, qui ont une API entièrement différente. Plusieurs méthodes sont maintenant statiques, ce qui signifie que vous pouvez les appeler directement sur FileAccess ou DirAccess sans avoir à créer une instance de cette classe.
Les méthodes d'écran et de fenêtre du singleton OS (comme
OS.get_screen_size()) ont été transférées au singleton DisplayServer. La dénomination de la méthode a également été modifiée pour utiliser la formeDisplayServer.<object>_<get/set>_property(). Par exemple,OS.get_screen_size()devientDisplayServer.screen_get_size().Les méthodes de temps et de date du singleton OS ont été transférées au singleton Time. (Le singleton Time est également disponible dans Godot 3.5 et après.)
Vous devrez peut-être remplacer certains appels
instance()parinstantiate(). Le convertisseur devrait gèrer cela automatiquement, mais cela dépend sur du code personnalisé qui peut ne pas fonctionner dans 100% des situations.set_autowrap()``d'AcceptDialog est maintenant``set_autowrap_mode().AnimationNode's
process()is now_process()(note the leading underscore, which denotes a virtual method).get_points()de AStar2D et AStar3D est maintenantget_points_id().set_event()de BaseButton est dorénavantset_shortcut().get_v_offset()de Camera2D est dorénavantget_drag_vertical_offset().set_v_offset()de Camera2D est dorénavantset_drag_vertical_offset().update()de CanvasItem est dorénavantqueue_redraw().set_tooltip()de Control est dorénavantset_tooltip_text().create_gizmo()de EditeurNode3DGizmoPlugin est maintenant_create_gizmo()(notez le préfixe tiret bas, qui indique une méthode virtuelle).get_peer_port()de ENetMultiplayerPeer est maintenantget_peer().get_mode()de FileDialog est maintenantget_file_mode().set_mode()de FileDialog est maintenantset_file_mode().get_offset()de GraphNode est maintenantget_position_offset().world_to_map()de GridMap est maintenantlocal_to_map().map_to_world()de GridMap est maintenantmap_to_local().get_rect()de Image est maintenantget_region().get_v_scroll()de ItemList est maintenantget_v_scroll_bar().get_network_connected_peers()de MultiPlayer API est dorénavantget_peers().get_network_peer()de MultiPlayerAPI est dorénavantget_peer().get_network_unique_id()de MultiPlayerAPI est dorénavantget_unique_id().has_network_peer()de MultiPlayerAPI est dorénavanthas_multiplayer_peer().is_listening()de PacketPeerUDP est dorénavantis_bound().listen()de PacketPeerUDP est dorénavantbind().set_flag()de ParticleProcessMaterial est dorénavantset_particle_flag().get_dependencies()de ResourceFormatLoader est maintenant_get_dependencies()(Notez le préfixe tiret bas, qui indique une méthode virtuelle).change_scene()de SceneTree est maintenantchange_scene_to_file().is_valid()de Shortcut est maintenanthas_valid_event().world_to_map()de TileMap est maintenantlocal_to_map().map_to_world()de TileMap est maintenantmap_to_local().Transform2D's
xform()ismat * vecandxform_inv()isvec * mat.
Propriétés
Note
Si une propriété est énumérée ici, ses méthodes donneur et getter doivent aussi être rennomées manuellement si elles sont utilisés dans le projet. Par exemple, les méthodes de PathFollow2D et PathFollow3D set_offset() et get_offset()``doivent être respectivement rennomées à ``set_progress() et get_progress().
La
marginde Control est dorénavant``offset``.percent_visiblede Label est dorénavantvisible_ratio.refuse_new_network_connectionsde MultiPlayerAPI est dorénavantrefuse_new_connections.offsetde PathFollow2D et PathFollow3D est dorénavantprogress.percent_visiblede TextureProgressBar est dorénavantshow_percentage.The
extentsproperty on CSG nodes and VoxelGI will have to be replaced withsize, with the set value halved (as they're no longer half-extents). This also affects its setter/getter methodsset_extents()andget_extents().La propriété
Engine.editor_hinta été retirée en faveur de la méthodeEngine.is_editor_hint(). C'est parce qu'elle est en lecture seule, et les propriétés de Godot ne sont pas utilisées pour les valeurs en lecture seule.
Énumérations
FLAG_MAXde CPUParticles2D est dorénavantPARTICLE_FLAG_MAX.
Signaux
instantiatede FileSystemDock est dorénavantinstance.hidede CanvasItem est maintenanthidden. Ce renommage ne s'applique pas à la méthodehide(), seulement au signal.tween_all_completedde Tween est dorénavantloop_finished.changedde EditorSettings est dorénavantsettings_changed.
Constantes
Les noms de couleur sont maintenant en majuscules et utilisent des tirets bas entre les mots. Par exemple,
Color.palegreenest maintenantColor.PALE_GREEN.Les constantes
NOTIFICATION_de MainLoop ont été dupliquées àNode, ce qui signifie que vous pouvez supprimer le préfixeMainLoopquand vous les référez.NOTIFICATION_WM_QUIT_REQUESTde MainLoop est maintenantNOTIFICATION_WM_CLOSE_REQUEST.
Vérification des paramètres du projet
Plusieurs réglages de projet ont été renommés, et certains d'entre eux ont changé de manière incompatible (comme la qualité du filtre des ombres). Cela signifie que vous puissiez avoir besoin de définir de nouveau les valeurs de certains paramètres de projet. Assurez-vous que le bouton Avancé est activé dans la fenêtre des paramètres du projet afin que vous puissiez voir tous les paramètres du projet.
Vérification des options d'environnement
Les paramètres de qualité graphique ont été déplacés depuis les propriétés d’environnement vers les paramètres du projet. Cela a été fait pour faciliter les ajustements de qualité en temps réel, sans avoir à accéder à la ressource d'environnement actuellement active puis modifier ses propriétés.
Par conséquent, vous devrez configurer les paramètres de qualité environnement dans les paramètres du projet puisque les anciens paramètres de qualité d'environement ne sont pas automatiquement convertis en des paramètres du projet.
If you have a graphics settings menu that changed environment properties in Godot 3.x, you will have to change its code to call RenderingServer methods that affect environment effects' quality. Only the "base" toggle of each environment effect and its visual knobs remain within the Environment resource.
Mettre à jours les shaders
There have been some changes to shaders that aren't covered by the upgrade tool.
You will need to make some manual changes, especially if your shader uses coordinate
space transformations or a custom light() function.
L'extension de fichier .shader n'est plus supportée, ce qui signifie que vous devez renommer les fichiers .shader en .gdshader et mettre à jour les références en conséquence dans les fichiers de scène/ressource en utilisant un éditeur de texte externe.
Some notable changes 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_albedoest maintenantsource_color.hint_colorest dorénavantsource_color.Les shaders de particules n'utilisent plus la fonction de traitement
vertex(). Au lieu de cela ils utilisentstart()etprocess().In the Forward+ and Mobile renderers, normalized device coordinates now have a Z-range of
[0.0,1.0]instead of[-1.0,1.0]. When reconstructing NDC fromSCREEN_UVand depth, usevec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth);instead ofvec3 ndc = vec3(SCREEN_UV, depth) * 2.0 - 1.0;. The Compatibility renderer is unchanged, using the same NDC Z-range as 3.x.The lighting model changed. If your shader has a custom
light()function, you may need to make changes to get the same visual result.In 4.3 and up, the reverse Z depth buffer technique is now implemented, which may break advanced shaders. See Introducing Reverse Z (AKA I'm sorry for breaking your shader).
Voir Langue de shading pour plus d'informations.
This list is not exhaustive. If you made all the changes mentioned here and your shader still doesn't work, try asking for help in one of the community channels.
Mise à jour des scripts pour tenir compte des changements incompatibles
Certains changements effectués entre Godot 3.x et 4 ne sont pas des renoms, mais ils cassent encore la rétrocompatibilité en raison de différents comportements par défaut.
Les exemples les plus notables sont les suivants :
Les fonctions de cycle de vie telles que
_ready()et_process()`n'appellent plus implicitement les fonctions de parent qui ont le même nom. Au lieu de cela, vous devez utilisersuper()au sommet d'une fonction de cycle de vie dans la classe enfant afin que la fonction de classe parente soit appelée en premier.Les deux classes String et StringName sont maintenant exposés en GDScript. Cela permet une plus grande optimisation, car StringName est spécifiquement conçue pour être utilisé pour les chaînes "constantes" qui sont créées une fois et réutilisées plusieurs fois. Ces types ne sont pas strictement équivalents l'un à l'autre, ce qui signifie que
is_same("example", &"example")renvoiefalse. Bien que dans la plupart des cas ils sont interchangeables ("example" == &"example"renvoietrue), parfois vous devriez avoir à remplacer"example"avec&"example".La syntaxe du getter et setter en GDScript a été changée, mais elle est seulement partiellement convertie par l'outil de conversion. Dans la plupart des cas, des modifications manuelles sont nécessaires pour faire fonctionner de nouveau les setters et les getters.
La syntaxe de connexion aux signaux en GDScript a été changée. L'outil de conversion utilisera la syntaxe basée sur les chaînes de caractères qui est toujours présente dans Godot 4, mais il est recommandé de passer à la syntaxe basée sur Signal décrite sur la page liée. De cette façon, les chaînes de caractères ne sont plus impliquées, ce qui évite les problèmes avec des erreurs de nom de signal qui ne peuvent être découvertes qu'en cours d'exécution.
Les scripts intégrés qui sont :ref:` des scripts d'outil <doc_running_code_in_the_editor>` n'ont pas le mot-clé
tool'converti en l'annotation@tool.Le noeud Tween a été retiré en faveur des Tweeners, qui sont également disponibles dans Godot 3.5 et après. Pour plus de détails, consultez la pull request initiale.
randomize()est maintenant automatiquement appelé lors du chargement du projet, donc l'aléatoire déterministe avec l'instance globale RandomNumberGenerate nécessite de définir manuellement une graine dans la fonction_ready().call_group(),set_group()andnotify_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, replacecall_group(...)withcall_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)(and do the same withset_group()andnotify_group()respectively).Au lieu de
rotation_degrees, la propriétérotationest exposée à l'éditeur, qui est automatiquement affiché en degrés dans le dock de l'inspecteur. Cela peut briser des animations, car la conversion n'est pas gérée automatiquement par l'outil de conversion.has_no_surface()de AABB a été inversé et renomméhas_surface().has_no_area()de AABB et class_Rect2`ont été inversés et renommés ``has_area()`.La propriété
fpsde AnimatedTexture a été remplacée parspeed_scale, qui fonctionne comme la propriétéplayback_speedde AnimationPlayer.AnimatedSprite2D et AnimatedSprite3D permettent désormais des valeurs négatives de
speed_scale. Cela peut casser des animations si vous vous fiez à ce quespeed_scalesoit limité en interne à0.0.La propriété
playingde AnimatedSprite2D et class_AnimatedSprite3D`a été supprimée. Utilisez les méthodes ``play()`/stop()à la place ou configurez l'animation enautoplayvia le panneau du bas de SpritesFrames (mais pas les deux à la fois).Le second paramètre de
slice()de class_Array`(``end`) est dorénavant exclusif, au lieu d'être inclusif. Par exemple, cela signifie que[1, 2, 3].slice(0, 1)renvoie maintenant[1]au lieu de[1, 2].Les signaux de BaseButton sont dorénavant
button_upetbutton_down. La propriétépressedest dorénavantbutton_pressed.La propriété
rotationde Camera2D a été remplacée parignore_rotation, qui a inversé le comportement.La propriété
zoomde Camera2D a été inversée : les valeurs supérieures signifie maintenant plus zoomé, au lieu de moins.La méthode
remove_and_skip()de Node a été supprimée. Si vous avez besoin de la réimplémenter dans un script, vous pouvez utiliser l'ancienne implémentation C++ comme référence.OS.get_system_time_secs()devrait être converti enTime.get_time_dict_from_system()["second"].La méthode
save()de ResourceSaver a dorénavant ses arguments échangés (resource: Resource, chemin: String). Cela s'applique également à la méthode_save()de ResourceFormatSaver.Une StreamPeerTCP doit avoir
poll()appelé sur elle pour mettre à jour son état, au lieu de s'appuyer sur du sondage automatique avecget_status(): GH-59582La méthode
right()de String a changé de comportement : elle renvoie maintenant un certain nombre de caractères de la droite de la chaîne, plutôt que du côté droit de la chaîne depuis une position donnée. Si vous avez besoin de l'ancien comportement, vous pouvez utilisersubstr()à la place.is_connected_to_host()a été supprimé de StreamPeerTCP et PacketPeerUDP selon GH-59582.get_status()peut être utilisé dans StreamPeerTCP à la place.is_socket_connected()peut être utilisé dans PacketPeerUDP à la place.Dans
_get_property_list(), la propriété de chaîne indiceor_lesserest dorénavantor_less.Dans
_get_property_list(), la propriété de chaîne indicenosliderest dorénavantno_slider.VisualShaderNodeVec4Parameter prend dorénavant un Vector4 comme paramètre au lieu d'un Quaternion.
Retiré ou remplacé des nœuds / ressources
Cela liste tous les nœuds qui ont été remplacés par un autre nœud nécessitant une configuration différente. La configuration doit être faite à partir de zéro, car le convertisseur de projet ne supporte pas la mise à jour des configurations existantes :
Nœud supprimé |
Plus proche approximation |
Commentaire |
|---|---|---|
AnimationTreePlayer |
AnimationTree |
AnimationTreePlayer est déprécié depuis Godot 3.1. |
BakedLightmap |
LightmapGI |
|
BakedLightmapData |
LightmapGIData |
|
BitmapFont |
FontFile |
Voir Using Fonts. |
Police dynamique |
FontFile |
|
DynamicFontData |
FontFile |
|
Navigation2D |
Node2D |
Remplacé par d'autres nœuds de Navigation 2D. |
Navigation3D |
Node3D |
Remplacé par d'autres nœuds de navigation 3D. |
OpenSimplexNoise |
FastNoiseLite |
A différents paramètres et plus de types de bruit tels que cellulaire. Pas de support pour le bruit 4D car il est absent de la bibliothèque FastNoiseLite. |
ToolButton |
Button |
ToolButton était Button avec la propriété Flat activée par défaut. |
YSort |
Node2D ou Control |
CanvasItem a une nouvelle propriété Y Sort Enabled dans 4.0. |
ProximityGroup |
Node3D |
VisibleOnScreenNotifier3D peut servir de remplacement. |
Portal |
Node3D |
Portal and room occlusion culling was replaced by raster occlusion culling (OccluderInstance3D node), which requires a different setup process. |
Room |
Node3D |
|
RoomManager (Gestionnaire de salles) |
Node3D |
|
RoomGroup |
Node3D |
|
Occluder |
Node3D |
Geometry occlusion culling was replaced by raster occlusion culling (OccluderInstance3D node), which requires a different setup process. |
OccluderShapeSphere |
Resource |
Lord du chargement d'un ancien projet, le nœud sera remplacé par son Plus proche approximation automatiquement (même sans utiliser l'outil de mise à niveau du projet).
Modifications de Threading
Les API de Threading ont changé en 4.0. Par exemple, le fragment de code suivant dans Godot 3.x doit être modifié pour fonctionner dans 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() n'est plus utilisé et doit être converti en Thread.is_alive().
Voir aussi
Voir le`changelog <https://github.com/godotengine/godot/blob/master/CHANGELOG.md>`__ pour la liste complète des changements entre Godot 3.x et 4.
Fin de comptabilité de ressource ArrayMesh
Si vous avez sauvegardé une ressource ArrayMesh en un fichier .res ou .tres, le format utilisé en 4.0 n'est pas compatible avec celui utilisé en 3.x. Vous aurez besoin de passer par le processus d'importation du fichier source de maillage et de l'enregistrer comme une ressource ArrayMesh à nouveau.
Liste des méthodes, propriétés, signaux et constantes automatiquement renommés
Le fichier source editor/renames_map_3_to_4.cpp liste tous les renommages automatiques effectués par l'outil de mise à niveau du projet. Les lignes qui sont commentées se réfèrent aux renommages d'API qui ne peuvent êtres effectuées automatiquement.
Porter les paramètre de l'éditeur
Godot 3.x et 4.0 utilisent différents fichiers de paramètres de l'éditeur. Cela signifie que leurs paramètres peuvent être changés indépendamment l'un de l'autre.
Si vous souhaitez transférer vos réglages Godot 3.x vers Godot 4, ouvrez le dossier editor settings folder et copiez editor_settings-3.tres vers editor_settings-4.tres pendant que l'éditeur Godot 4 est fermé.
Note
De nombreux noms et catégories de paramètres ont changé depuis Godot 3.x. Les réglages de l'éditeur dont le nom ou la catégorie a changé ne seront pas portés à Godot 4.0; vous devrez de nouveau définir leurs valeurs.