Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Mise à niveau de Godot 3 vers 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, et Liste des fonctionnalités pour une liste de toutes les fonctionnalité de Godot.
Désavantages de la mise à niveau
Si vous n'avez pas besoin des fonctionnalités présentes dans Godot 4.x, vous pouvez vouloir rester sur Godot 3.x pour les raisons suivantes :
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 moteur de rendu Compatibilité, 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 :
La physique Bullet a été retirée en faveur de GodotPhysics. Cela n'affecte que les projets 3D qui utilisaient le moteur de physique par défaut (qui était Bullet) et ne l'ont pas manuellement changé pour GodotPhysics. Il n'est pas prévu de ré-ajouter la physique Bullet dans le moteur, mais un add-on tiers pourrait être créé pour ça grâce à GDExtension.
Par défaut, le rendu en 2D n'est plus effectué en HDR, ce qui signifie que les valeurs de modulation "overbright" n'ont pas d'effet visible. Depuis Godot 4.2, vous pouvez activer le paramètre de projet HDR 2D pour effectuer le rendu 2D en HDR. Voir aussi Using glow in 2D.
Bien que le rendu se produit toujours en HDR en 3D lors de l'utilisation des moteurs de rendu Forward+ ou Mobile, les Viewports ne peuvent plus renvoyer de données HDR. Il est prévu de restaurer ceci dans l'avenir.
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 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
Danger
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 |
BoxShape |
BoxShape3D |
CapsuleShape |
CapsuleShape3D |
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 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 dorénavantset_autowrap_mode().process()de AnimationNode est maintenant_process()(notez le préfixe tiret bas, qui indique une méthode virtuelle).add_animation()de AnimationPlayer est dorénavantadd_animation_library()et utilise dorénavant une AnimationLibrary.set_process_mode()de AnimationTree est dorénavantset_process_callback().empty()de Array est dorénavantis_empty().invert()de Array est dorénavantreverse().remove()de Array est dorénavantremove_at().get_points()de AStar2D et AStar3D est maintenantget_points_id().set_event()de BaseButton est dorénavantset_shortcut().get_h_offset()de Camera2D est dorénavantget_drag_horizontal_offset().get_v_offset()de Camera2D est dorénavantget_drag_vertical_offset().set_h_offset()de Camera2D est dorénavantset_drag_horizontal_offset().set_v_offset()de Camera2D est dorénavantset_drag_vertical_offset().raise()de Camera2D est dorénavantmove_to_front().update()de CanvasItem est dorénavantqueue_redraw().get_stylebox()de Control est dorénavantget_theme_stylebox().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().map_to_world()de GridMap est maintenantmap_to_local().world_to_map()de GridMap est maintenantlocal_to_map().get_rect()de Image est maintenantget_region().set_normal()de ImmediateGeometry est maintenantsurface_set_normal().set_color()de ImmediateMesh est dorénavantsurface_set_color().set_uv()de ImmediateMesh est dorénavantsurface_set_uv().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_refusing_new_network_connections()de MultiPlayerAPI est dorénavantis_refusing_new_connections().is_listening()de PacketPeerUDP est dorénavantis_bound().listen()de PacketPeerUDP est dorénavantbind().set_flag()de ParticleProcessMaterial est dorénavantset_particle_flag().get_motion()de PhysicsTestMotionResult2D est dorénavantget_travel().get_render_info()de RenderingServer est dorénavantget_rendering_info().get_dependencies()de ResourceFormatLoader est maintenant_get_dependencies()(Notez le préfixe tiret bas, qui indique une méthode virtuelle).load()de ResourceFormatLoader est dorénavant_load().change_scene()de SceneTree est maintenantchange_scene_to_file().is_valid()de Shortcut est maintenanthas_valid_event().map_to_world()de TileMap est maintenantmap_to_local().world_to_map()de TileMap est maintenantlocal_to_map().Transform2D's
xform()ismat * vecandxform_inv()isvec * mat.get_name()de XRPositionalTracker est dorénavantget_tracker_name().get_type()de XRPositionalTracker est dorénavantget_tracker_type()._set_name()de XRPositionalTracker est dorénavantget_tracker_name().
Propriétés
Note
Si une propriété est énumérée ici, ses méthodes setter et getter doivent aussi être renommé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 renommées à set_progress() et get_progress().
devicede AudioServer est dorénavantoutput_device.groupde BaseButton est dorénavantbutton_group.zfarde Camera3D est dorénavantfar.Le
znearde Camera3D est dorénavantnearmarginde Control est dorénavantoffset.doubleclickde InputEventMouseButton est dorénavantdouble_click.altde InputEventWithModifiers est dorénavantalt_pressed.commandde InputEventWithModifiers est dorénavantcommand_pressed.controlde InputEventWithModifiers est dorénavantctrl_pressed.metade InputEventWithModifiers est dorénavantmeta_pressed.shiftde InputEventWithModifiers est dorénavantshift_pressed.percent_visiblede Label est dorénavantvisible_ratio.refuse_new_network_connectionsde MultiPlayerAPI est dorénavantrefuse_new_connections.filenamede Node est dorénavantscene_file_path.rotatede PathFollow2D est dorénavantrotates.offsetde PathFollow2D et PathFollow3D est dorénavantprogress.extentsde RectangleShape2D est dorénavantsizepercent_visiblede TextureProgressBar est dorénavantshow_percentage.offde Theme est dorénavantunchecked.ofsde Theme est dorénavantoffset.onde Theme est dorénavantchecked.window_titlede Window est dorénavanttitle.dde WorldMarginShape2D est dorénavantdistance.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 dorénavanthidden. 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.
Si vous avez un menu de paramètres graphiques qui a changeait les propriétés d'environnement dans Godot 3.x, vous devrez modifier son code pour appeler les méthodes de RenderingServer qui affectent la qualité des effets de l'environnement. Seule la "base" de chaque effet environnemental et ses boutons visuels restent dans la ressource Environnement.
Mettre à jours les shaders
Il y a eu quelques changements pour les shaders qui ne sont pas couverts par l'outil de mise à niveau. Vous aurez besoin de faire quelques changements manuels, surtout si votre shader utilise des transformations d'espace de coordonnées ou une fonction light() personnalisée.
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.
Certains renommages notables que vous devrez effectuer dans les shaders sont :
Les modes de filtrage et de répétition sont maintenant définis sur des uniformes individuels, plutôt que sur les fichiers de texture eux-mêmes.
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().Dans les moteurs de rendu Forward+ et Mobile, les coordonnées normalisées de l'appareil disposent désormais d'une plage Z de
[0.0,1.0]au lieu de[-1.0,1.0]. Lors de la reconstruction des coordonnées normalisées depuisSCREEN_UVet la profondeur, utilisezvec3 coor_norm = vec3(SCREEN_UV * 2.0 - 1.0, profondeur);au lieu devec3 coor_norm = vec3(SCREEN_UV, profondeur) * 2.0 - 1.0;. Le moteur de rendu Compatibilité est inchangé, en utilisant la même plage Z de coordonnées normalisées que la 3.x.Le modèle d'éclairage a changé. Si votre shader a une fonction
light()personnalisée, vous pouvez avoir besoin de faire des changements pour obtenir le même résultat visuel.Dans la 4.3 et plus, la technique de buffer de profondeur Z inverse est maintenant implémentée, ce qui peut casser les shaders avancés. Voir Introducing Reverse Z (AKA I'm sorry for breaking your shader).
Voir Langue de shading pour plus d'informations.
Cette liste n'est pas exhaustive. Si vous avez effectué tous les changements mentionnés ici et que votre shader ne fonctionne toujours pas, essayez de demander de l'aide sur l'un des canaux communautaires de Godot.
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 que durant l'exécution.
Les scripts intégrés qui sont des scripts d'outil n'ont pas le mot-clé
tool'converti en l'annotation@tool.Le nœud 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()etnotify_group()sont maintenant immédiates par défaut. Si l'on appelle une fonction coûteuse, cela peut entraîner du stuttering lorsqu'elles sont utilisées sur un groupe contenant un grand nombre de nœuds. Pour utiliser les appels différés comme avant, remplacezcall_group(...)parcall_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)(et faire de même avecset_group()etnotify_group()`respectivement).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 Rect2 ont été inversés et renommés enhas_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 AnimatedSprite3D a été supprimée. Utilisez les méthodesplay()/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 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 |
|
Police dynamique |
FontFile |
|
DynamicFontData |
FontFile |
|
ClippedCamera |
Camera2D ou Camera3D |
La forme pyramidale de caméra a été déplacée dans :ref:'class_Camera3D'. |
InterpolatedCamera |
Camera2D ou Camera3D |
|
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
The editor/project_upgrade/renames_map_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 cannot be performed automatically.
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.
Mettre à jour les paramètres du contrôle de version
Godot 3.x et 4.x ont des listes entièrement différentes de fichiers et de dossiers qui doivent être ignorés par votre système de contrôle de version.