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.

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 :

  1. Ouvrez le gestionnaire de projets de Godot 4.

  2. Importez le projet Godot 3.x en utilisant le bouton Import, ou utilisez le bouton Scan pour trouver le projet dans un dossier.

  3. Double-cliquez sur le projet importé (ou sélectionnez le projet puis choisissez Éditer).

  4. 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.

  5. 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.

  6. 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 forme DisplayServer.<object>_<get/set>_property(). Par exemple, OS.get_screen_size() devient DisplayServer.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() par instantiate(). 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énavant set_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énavant add_animation_library() et utilise dorénavant une AnimationLibrary.

  • set_process_mode() de AnimationTree est dorénavant set_process_callback().

  • empty() de Array est dorénavant is_empty().

  • invert() de Array est dorénavant reverse().

  • remove() de Array est dorénavant remove_at() .

  • get_points() de AStar2D et AStar3D est maintenant get_points_id().

  • set_event() de BaseButton est dorénavant set_shortcut().

  • get_h_offset() de Camera2D est dorénavant get_drag_horizontal_offset().

  • get_v_offset() de Camera2D est dorénavant get_drag_vertical_offset().

  • set_h_offset() de Camera2D est dorénavant set_drag_horizontal_offset().

  • set_v_offset() de Camera2D est dorénavant set_drag_vertical_offset().

  • raise() de Camera2D est dorénavant move_to_front().

  • update() de CanvasItem est dorénavant queue_redraw().

  • get_stylebox() de Control est dorénavant get_theme_stylebox().

  • set_tooltip() de Control est dorénavant set_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 maintenant get_peer().

  • get_mode() de FileDialog est maintenant get_file_mode().

  • set_mode() de FileDialog est maintenant set_file_mode().

  • get_offset() de GraphNode est maintenant get_position_offset().

  • map_to_world() de GridMap est maintenant map_to_local().

  • world_to_map() de GridMap est maintenant local_to_map().

  • get_rect() de Image est maintenant get_region().

  • set_normal() de ImmediateGeometry est maintenant surface_set_normal().

  • set_color() de ImmediateMesh est dorénavant surface_set_color().

  • set_uv() de ImmediateMesh est dorénavant surface_set_uv().

  • get_v_scroll() de ItemList est maintenant get_v_scroll_bar().

  • get_network_connected_peers() de MultiPlayer API est dorénavant get_peers().

  • get_network_peer() de MultiPlayerAPI est dorénavant get_peer().

  • get_network_unique_id() de MultiPlayerAPI est dorénavant get_unique_id().

  • has_network_peer() de MultiPlayerAPI est dorénavant has_multiplayer_peer().

  • is_refusing_new_network_connections() de MultiPlayerAPI est dorénavant is_refusing_new_connections().

  • is_listening() de PacketPeerUDP est dorénavant is_bound().

  • listen() de PacketPeerUDP est dorénavant bind().

  • set_flag() de ParticleProcessMaterial est dorénavant set_particle_flag().

  • get_motion() de PhysicsTestMotionResult2D est dorénavant get_travel().

  • get_render_info() de RenderingServer est dorénavant get_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 maintenant change_scene_to_file().

  • is_valid() de Shortcut est maintenant has_valid_event().

  • map_to_world() de TileMap est maintenant map_to_local().

  • world_to_map() de TileMap est maintenant local_to_map().

  • Transform2D's xform() is mat * vec and xform_inv() is vec * mat.

  • get_name() de XRPositionalTracker est dorénavant get_tracker_name().

  • get_type() de XRPositionalTracker est dorénavant get_tracker_type().

  • _set_name() de XRPositionalTracker est dorénavant get_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().

  • device de AudioServer est dorénavant output_device.

  • group de BaseButton est dorénavant button_group.

  • zfar de Camera3D est dorénavant far.

  • Le znear de Camera3D est dorénavant near

  • margin de Control est dorénavant offset.

  • doubleclick de InputEventMouseButton est dorénavant double_click.

  • alt de InputEventWithModifiers est dorénavant alt_pressed.

  • command de InputEventWithModifiers est dorénavant command_pressed.

  • control de InputEventWithModifiers est dorénavant ctrl_pressed.

  • meta de InputEventWithModifiers est dorénavant meta_pressed.

  • shift de InputEventWithModifiers est dorénavant shift_pressed.

  • percent_visible de Label est dorénavant visible_ratio.

  • refuse_new_network_connections de MultiPlayerAPI est dorénavant refuse_new_connections.

  • filename de Node est dorénavant scene_file_path.

  • rotate de PathFollow2D est dorénavant rotates.

  • offset de PathFollow2D et PathFollow3D est dorénavant progress.

  • extents de RectangleShape2D est dorénavant size

  • percent_visible de TextureProgressBar est dorénavant show_percentage.

  • off de Theme est dorénavant unchecked.

  • ofs de Theme est dorénavant offset.

  • on de Theme est dorénavant checked.

  • window_title de Window est dorénavant title.

  • d de WorldMarginShape2D est dorénavant distance.

  • The extents property on CSG nodes and VoxelGI will have to be replaced with size, with the set value halved (as they're no longer half-extents). This also affects its setter/getter methods set_extents() and get_extents().

  • La propriété Engine.editor_hint a été retirée en faveur de la méthode Engine.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_MAX de CPUParticles2D est dorénavant PARTICLE_FLAG_MAX.

Signaux

  • instantiate de FileSystemDock est dorénavant instance.

  • hide de CanvasItem est dorénavant hidden. Ce renommage ne s'applique pas à la méthode hide(), seulement au signal.

  • tween_all_completed de Tween est dorénavant loop_finished.

  • changed de EditorSettings est dorénavant settings_changed.

Constantes

  • Les noms de couleur sont maintenant en majuscules et utilisent des tirets bas entre les mots. Par exemple, Color.palegreen est maintenant Color.PALE_GREEN.

  • Les constantes NOTIFICATION_ de MainLoop ont été dupliquées à Node, ce qui signifie que vous pouvez supprimer le préfixe MainLoop quand vous les référez.

  • NOTIFICATION_WM_QUIT_REQUEST de MainLoop est maintenant NOTIFICATION_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_albedo est maintenant source_color.

  • hint_color est dorénavant source_color.

  • Les variables de matrices intégrés ont été renommées.

  • Les shaders de particules n'utilisent plus la fonction de traitement vertex(). Au lieu de cela ils utilisent start() et process().

  • 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 depuis SCREEN_UV et la profondeur, utilisez vec3 coor_norm = vec3(SCREEN_UV * 2.0 - 1.0, profondeur); au lieu de vec3 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 utiliser super() 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") renvoie false. Bien que dans la plupart des cas ils sont interchangeables ("example" == &"example" renvoie true), 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() et notify_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, remplacez call_group(...) par call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...) (et faire de même avec set_group() et notify_group()` respectivement).

  • Au lieu de rotation_degrees, la propriété rotation est 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 en has_area().

  • La propriété fps de AnimatedTexture a été remplacée par speed_scale, qui fonctionne comme la propriété playback_speed de AnimationPlayer.

  • AnimatedSprite2D et AnimatedSprite3D permettent désormais des valeurs négatives de speed_scale. Cela peut casser des animations si vous vous fiez à ce que speed_scale soit limité en interne à 0.0.

  • La propriété playing de AnimatedSprite2D et AnimatedSprite3D a été supprimée. Utilisez les méthodes play()/stop() à la place ou configurez l'animation en autoplay via 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_up et button_down. La propriété pressed est dorénavant button_pressed.

  • La propriété rotation de Camera2D a été remplacée par ignore_rotation, qui a inversé le comportement.

  • La propriété zoom de 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 en Time.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 avec get_status() : GH-59582

  • La 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 utiliser substr() à 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 indice or_lesser est dorénavant or_less.

  • Dans _get_property_list(), la propriété de chaîne indice noslider est dorénavant no_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

Voir Usage de l'illumination globale par lightmap.

BakedLightmapData

LightmapGIData

BitmapFont

FontFile

Voir Utiliser des polices d'écriture.

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.