Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Upgraden von Godot 3 auf Godot 4

Sollte ich auf Godot 4 upgraden?

Bevor Sie mit dem Upgrade beginnen, sollten Sie sich Gedanken über die Vor- und Nachteile machen, die das Upgrade für Ihr Projekt mit sich bringen würde.

Vorteile des Upgrades

Neben den neuen Features in 4.0 bietet das Upgrade folgende Vorteile:

  • Viele Bugs werden in 4.0 behoben, können aber aus verschiedenen Gründen (z. B. Unterschiede in der Grafik-API oder Abwärtskompatibilität) in 3.x nicht behoben werden.

  • 4.x wird einen längeren Unterstützungszeitraum genießen. Godot 3.x wird noch einige Zeit nach der Veröffentlichung von 4.0 unterstützt werden, aber schließlich wird der Support eingestellt.

Siehe Änderungsprotokoll der Dokumentation für eine Liste von Seiten, die neue Funktionen in Godot 4.0 dokumentieren.

Nachteile des Upgrades

Wenn Sie keine der in Godot 4.0 enthaltenen Funktionen brauchen, sollten Sie aus folgenden Gründen bei Godot 3.x bleiben:

  • Godot 3.x ist erprobt und bewährt, während Godot 4 noch in den Kinderschuhen steckt.

    • Godot 4.0 wird voraussichtlich Workflow- und Leistungsprobleme enthalten, die in Godot 3.x nicht vorhanden sind. Diese Probleme werden im Laufe der Zeit in künftigen Godot 4.x-Versionen behoben.

  • Für Godot 4 stehen weniger Tutorials von Drittanbietern zur Verfügung als für Godot 3.x. Wenn Sie neu im Bereich der Spiele-Engines sind, werden Sie mit Godot 3.x möglicherweise bessere Erfahrungen machen.

  • Die grundlegenden Hardware-Anforderungen von Godot 4 (z. B. die Speichernutzung) sind etwas höher, sowohl für den Editor als auch für exportierte Projekte. Dies war für die Implementierung einiger Kernoptimierungen erforderlich.

  • Da Godot 4 mehr Funktionen als Godot 3 enthält, ist die Binärgröße von Godot 4 für exportierte Projekte größer. Dies kann zwar durch Optimierung eines Builds für Größe abgemildert werden, aber ein 4.0-Build mit einem bestimmten Satz aktivierter Module bleibt im Vergleich zu einem 3.x-Build mit denselben Modulen größer. Dies kann ein Problem beim Exportieren ins Web sein, da die Binärgröße direkt beeinflusst, wie schnell die Engine initialisieren kann (unabhängig von der Downloadgeschwindigkeit).

  • Godot 4 bietet keine Unterstützung für GLES2-Rendering und wird dies auch in Zukunft nicht tun. (Es gibt immer noch Unterstützung für GLES3-Rendering mit dem neuen OpenGL-Backend, was bedeutet, dass Geräte ohne Vulkan-Unterstützung noch Godot 4 ausführen können).

    • Wenn Sie sehr alte Hardware wie Intel Sandy Bridge (2. Generation) Integrated Graphics anvisieren, wird dies verhindern, dass das Projekt nach einem Upgrade auf solcher Hardware läuft. Software-OpenGL-Implementierungen können verwendet werden, um diese Einschränkung zu umgehen, aber sie sind zu langsam für Spiele.

Vorbehalte gegen das Upgraden

Da Godot 4 in vielerlei Hinsicht komplett neu geschrieben wurde, sind dabei leider einige Funktionen verloren gegangen. Einige dieser Funktionen werden möglicherweise in künftigen Godot-Versionen wiederhergestellt:

  • Die Bullet-Physik wurde zu Gunsten von GodotPhysics entfernt. Dies betrifft nur 3D-Projekte, die auf die Standard-Physik-Engine (die Bullet war) zurückgegriffen haben und nicht manuell zu GodotPhysics geändert wurden. Es gibt keine Pläne, die Bullet-Physik wieder in den Kern einzubauen, aber dank der GDExtension könnte ein Add-on eines Drittanbieters dafür erstellt werden.

  • Das Rendering in 2D wird nicht mehr in HDR durchgeführt, was bedeutet, dass "überhelle" Modulationswerte keinen sichtbaren Effekt haben. Es ist geplant, dies irgendwann in der Zukunft wiederherzustellen.

  • Während das Rendering in HDR in 3D bei Verwendung der Backends Forward Plus oder Forward Mobile weiterhin erfolgt, können Viewports keine HDR-Daten mehr zurückgeben. Es ist geplant, dies irgendwann in der Zukunft wiederherzustellen.

  • Mono wurde durch .NET 6 ersetzt. Dies bedeutet, dass der Export von C#-Projekten für Android, iOS und HTML5 im Moment nicht mehr unterstützt wird. Der Export von C#-Projekten auf Desktop-Plattformen wird weiterhin unterstützt, und ab 4.2 gibt es experimentelle Unterstützung für den Export auf mobile Plattformen. Die Unterstützung für den Export von C#-Projekten für weitere Plattformen wird in zukünftigen 4.x-Releases wiederhergestellt, wenn sich die Upstream-Unterstützung verbessert.

Sie können eine vollständigere Liste von funktionalen Regressionen finden, indem Sie auf GitHub nach Issues mit dem Label "regression" aber nicht "bug" auf Github suchen.

Vorbereitungen vor dem Upgrade (optional)

Wenn Sie für ein künftiges Upgrade auf Godot 4 gerüstet sein wollen, sollten Sie die Verwendung von Tweener und dem Time-Singleton in Ihrem Projekt in Betracht ziehen. Diese Klassen sind beide in Godot 3.5 und höher verfügbar.

Auf diese Weise sind Sie nicht auf die veralteten Tween-Nodes und OS-Zeitfunktionen angewiesen, die beide in Godot 4.0 entfernt werden.

Es ist auch eine gute Idee, externe Shader so umzubenennen, dass ihre Erweiterung .gdshader statt .shader lautet. Godot 3.x unterstützt beide Erweiterungen, aber nur .gdshader wird in Godot 4.0 unterstützt.

Ausführen des Projekt-Upgrade-Tools

Warnung

Erstellen Sie vor dem Upgrade ein vollständiges Backup Ihres Projekts! Das Projekt-Upgrade-Tool führt keine Sicherungen des zu aktualisierenden Projekts durch.

Sie können ein Projekt mit Hilfe der Versionsverwaltung oder durch Kopieren des Projektordners an einen anderen Ort sichern.

Verwenden des Projektmanagers

So verwenden Sie das Projekt-Upgrade-Tool:

  1. Öffnen Sie den Godot 4-Projektmanager.

  2. Importieren Sie das Godot 3.x-Projekt mit dem Importieren-Button, oder verwenden Sie den Suchen-Button, um das Projekt in einem Ordner zu finden.

  3. Doppelklicken Sie auf das importierte Projekt (oder markieren Sie das Projekt und wählen Sie Bearbeiten).

  4. Es wird ein Dialog mit zwei Optionen angezeigt: Nur project.godot konvertieren und Gesamtes Projekt konvertieren. Nachdem Sie sichergestellt haben, dass Ihr Projekt gesichert ist (siehe die obige Warnung), wählen Sie Gesamtes Projekt konvertieren. Die Option Nur Projekt.godot konvertieren ist nur für fortgeschrittene Anwendungsfälle gedacht, für den Fall, dass das Konvertierungstool fehlschlägt.

  5. Warten Sie, bis der Projektkonvertierungsprozess abgeschlossen ist. Dies kann bei großen Projekten mit vielen Szenen bis zu einigen Minuten dauern.

  6. Wenn die Oberfläche des Projektmanagers wieder verfügbar ist, doppelklicken Sie auf das Projekt (oder markieren Sie das Projekt und wählen Sie Bearbeiten), um es im Editor zu öffnen.

Wenn Sie auf Konvertierungsprobleme stoßen, weil einige Projektdateien zu groß oder zu lang sind, können Sie das Projekt über die Kommandozeile aktualisieren (siehe unten). Dadurch können Sie die Größenbeschränkungen des Konverters außer Kraft setzen.

Verwendung der Kommandozeile

Um das Projekt-Upgrade-Tool über die Kommandozeile zu verwenden, empfiehlt es sich, die Projektkonvertierung durch Ausführen der Godot-Editor-Binärdatei mit den folgenden Argumenten zu validieren:

# [<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>]

Wenn Ihnen die Liste der geplanten Upgrades zusagt, führen Sie den folgenden Befehl in der Godot-Editor-Binärdatei aus, um die Projektdateien zu aktualisieren:

# [<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>] und [<max_line_size>] sind optionale Argumente, um die maximale Größe der zu konvertierenden Dateien (in Kilobytes und Zeilen) anzugeben. Die Standardgrenzen sind 4 MB bzw. 100.000 Zeilen. Wenn eine Datei einen dieser Grenzwerte überschreitet, wird sie vom Projektkonverter nicht konvertiert. Dies ist nützlich, um zu verhindern, dass große Ressourcen die Aktualisierung extrem verlangsamen.

Wenn Sie möchten, dass auch große Dateien vom Projekt-Upgrade-Tool konvertiert werden, erhöhen Sie die Größenbeschränkungen, wenn Sie das Projekt-Upgrade-Tool ausführen. Wenn Sie z. B. die Godot-Editor-Binärdatei mit diesen Argumenten ausführen, werden beide Grenzwerte um das 10-fache erhöht:

path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000

Bemerkung

Nur Godot 3.0- und spätere Projekte können mit dem Projektkonvertierungstool im Godot 4-Editor aktualisiert werden.

Es wird empfohlen, sicherzustellen, dass Ihr Projekt auf dem neuesten Stand der stable Version 3.x ist, bevor Sie das Projekt-Upgrade-Tool ausführen.

Reparieren des Projekts nach Ausführung des Projekt-Upgrade-Tools

Nach dem Upgrade des Projekts werden Sie vielleicht feststellen, dass bestimmte Dinge nicht mehr so aussehen, wie sie sollten. Auch die Skripte werden wahrscheinlich verschiedene Fehler enthalten (bei großen Projekten möglicherweise Hunderte). Das liegt daran, dass das Projekt-Upgrade-Tool nicht für alle Situationen geeignet ist. Daher muss ein großer Teil des Upgrade-Prozesses manuell durchgeführt werden.

Automatisch umbenannte Nodes und Ressourcen

Die nachstehende Liste bezieht sich auf Nodes, die in Godot 4.0 aus Gründen der Konsistenz oder Übersichtlichkeit einfach umbenannt wurden. Das Projekt-Upgrade-Tool benennt sie in Ihren Skripten automatisch um.

Eine bemerkenswerte Gruppe von Umbenennungen betrifft 3D-Knoten, die alle das Suffix 3D erhalten haben, um mit ihren 2D-Gegenstücken konsistent zu sein. Zum Beispiel heißt Area jetzt Area3D.

Um die Suche zu erleichtern, listet diese Tabelle alle Knoten und Ressourcen auf, die umbenannt wurden und automatisch umgewandelt werden, mit Ausnahme derer, bei denen lediglich ein 3D-Suffix an den alten Namen angehängt wurde:

Alter Name (Godot 3.x)

Neuer Name (Godot 4)

AnimatedSprite

AnimatedSprite2D

ARVRCamera

XRCamera3D

ARVRController

XRController3D

ARVRAnchor

XRAnchor3D

ARVRInterface

XRInterface

ARVROrigin

XROrigin3D

ARVRPositionalTracker

XRPositionalTracker

ARVRServer

XRServer

CubeMesh

BoxMesh

EditorSpatialGizmo

EditorNode3DGizmo

EditorSpatialGizmoPlugin

EditorNode3DGizmoPlugin

GIProbe

VoxelGI

GIProbeData

VoxelGIData

GradientTexture

GradientTexture1D

KinematicBody

CharacterBody3D

KinematicBody2D

CharacterBody2D

Light2D

PointLight2D

LineShape2D

WorldBoundaryShape2D

Listener

AudioListener3D

NavigationMeshInstance

NavigationRegion3D

NavigationPolygonInstance

NavigationRegion2D

Navigation2DServer

NavigationServer2D

PanoramaSky

Sky

Partikel

GPUParticles3D

Particles2D

GPUParticles2D

ParticlesMaterial

ParticleProcessMaterial

Physics2DDirectBodyState

PhysicsDirectBodyState2D

Physics2DDirectSpaceState

PhysicsDirectSpaceState2D

Physics2DServer

PhysicsServer2D

Physics2DShapeQueryParameters

PhysicsShapeQueryParameters2D

Physics2DTestMotionResult

PhysicsTestMotionResult2D

PlaneShape

WorldBoundaryShape3D

Position2D

Marker2D

Position3D

Marker3D

ProceduralSky

Sky

RayShape

SeparationRayShape3D

RayShape2D

SeparationRayShape2D

ShortCut

Shortcut

Spatial

Node3D

SpatialGizmo

Node3DGizmo

SpatialMaterial

StandardMaterial3D

Sprite

Sprite2D

StreamTexture

CompressedTexture2D

TextureProgress

TextureProgressBar

VideoPlayer

VideoStreamPlayer

ViewportContainer

SubViewportContainer

Viewport

SubViewport

VisibilityEnabler

VisibleOnScreenEnabler3D

VisibilityNotifier

VisibleOnScreenNotifier3D

VisibilityNotifier2D

VisibleOnScreenNotifier2D

VisibilityNotifier3D

VisibleOnScreenNotifier3D

VisualServer

RenderingServer

VisualShaderNodeScalarConstant

VisualShaderNodeFloatConstant

VisualShaderNodeScalarFunc

VisualShaderNodeFloatFunc

VisualShaderNodeScalarOp

VisualShaderNodeFloatOp

VisualShaderNodeScalarClamp

VisualShaderNodeClamp

VisualShaderNodeVectorClamp

VisualShaderNodeClamp

VisualShaderNodeScalarInterp

VisualShaderNodeMix

VisualShaderNodeVectorInterp

VisualShaderNodeMix

VisualShaderNodeVectorScalarMix

VisualShaderNodeMix

VisualShaderNodeScalarSmoothStep

VisualShaderNodeSmoothStep

VisualShaderNodeVectorSmoothStep

VisualShaderNodeSmoothStep

VisualShaderNodeVectorScalarSmoothStep

VisualShaderNodeSmoothStep

VisualShaderNodeVectorScalarStep

VisualShaderNodeStep

VisualShaderNodeScalarSwitch

VisualShaderNodeSwitch

VisualShaderNodeScalarTransformMult

VisualShaderNodeTransformOp

VisualShaderNodeScalarDerivativeFunc

VisualShaderNodeDerivativeFunc

VisualShaderNodeVectorDerivativeFunc

VisualShaderNodeDerivativeFunc

VisualShaderNodeBooleanUniform

VisualShaderNodeBooleanParameter

VisualShaderNodeColorUniform

VisualShaderNodeColorParameter

VisualShaderNodeScalarUniform

VisualShaderNodeFloatParameter

VisualShaderNodeCubeMapUniform

VisualShaderNodeCubeMapParameter

VisualShaderNodeTextureUniform

VisualShaderNodeTexture2DParameter

VisualShaderNodeTextureUniformTriplanar

VisualShaderNodeTextureParameterTriplanar

VisualShaderNodeTransformUniform

VisualShaderNodeTransformParameter

VisualShaderNodeVec3Uniform

VisualShaderNodeVec3Parameter

VisualShaderNodeUniform

VisualShaderNodeParameter

VisualShaderNodeUniformRef

VisualShaderNodeParameterRef

Manuelles Umbenennen von Methoden, Eigenschaften, Signalen und Konstanten

Aufgrund der Funktionsweise des Projekt-Upgrade-Tools können nicht alle API-Umbenennungen automatisch durchgeführt werden. Die folgende Liste enthält alle Umbenennungen, die manuell mit dem Skript-Editor durchgeführt werden müssen.

Wenn Sie einen Node oder eine Ressource in der folgenden Liste nicht finden können, schlagen Sie in der obigen Tabelle nach, um den neuen Namen zu ermitteln.

Tipp

Sie können den Dialog In Dateien ersetzen verwenden, um die Ersetzung zu beschleunigen, indem Sie Strg + Umschalt + R drücken, während der Skript-Editor geöffnet ist. Seien Sie jedoch vorsichtig, da das Dialogfeld "In Dateien ersetzen" keine Möglichkeit bietet, eine Ersetzung rückgängig zu machen. Verwenden Sie die Versionsverwaltung, um Ihre Aktualisierungsarbeiten regelmäßig zu committen. Kommandozeilentools wie sd können ebenfalls verwendet werden, wenn Sie etwas flexibler sein wollen als der Dialog "In Dateien ersetzen" des Editors.

Wenn Sie C# verwenden, denken Sie daran, im Projekt nach veralteter API-Nutzung mit PascalCase-Notation zu suchen (und die Ersetzung durch PascalCase-Notation vorzunehmen).

Methoden

  • Die Klassen File und Directory wurden durch FileAccess und DirAccess ersetzt, die eine völlig andere API haben. Mehrere Methoden sind jetzt statisch, was bedeutet, dass Sie sie direkt auf FileAccess oder DirAccess aufrufen können, ohne eine Instanz dieser Klasse erstellen zu müssen.

  • Bildschirm- und fensterbezogene Methoden aus dem OS-Singleton (wie OS.get_screen_size()) wurden in das DisplayServer-Singleton verschoben. Die Methodenbenamung wurde ebenfalls geändert, um stattdessen die Form DisplayServer.<Objekt>_<get/set>_property() zu verwenden. Zum Beispiel wird OS.get_screen_size() zu DisplayServer.screen_get_size().

  • Zeit- und Datumsmethoden aus dem Singleton OS wurden in das Singleton Time verschoben. (Das Time-Singleton ist auch in Godot 3.5 und später verfügbar).

  • Möglicherweise müssen Sie einige instance()-Aufrufe durch instantiate() ersetzen. Der Konverter sollte dies automatisch erledigen, aber dies beruht auf speziell dafür geschriebenem Code, der möglicherweise nicht in 100% der Fälle funktioniert.

  • Die Methode set_autowrap() von AcceptDialog ist jetzt set_autowrap_mode().

  • Die Methode process() von AnimationNode ist jetzt _process() (beachten Sie den führenden Unterstrich, der eine virtuelle Methode kennzeichnet).

  • Die Methode get_points() von AStar2D und AStar3D ist jetzt get_points_id().

  • Die Methode set_event() von BaseButton ist jetzt set_shortcut().

  • Die Methode get_v_offset() von Camera2D ist jetzt get_drag_vertical_offset().

  • Die Methode set_v_offset() von Camera2D ist jetzt set_drag_vertical_offset().

  • Die Methode update() von CanvasItem ist jetzt queue_redraw().

  • Die Methode set_tooltip() von Control ist jetzt set_tooltip_text().

  • Die Methode create_gizmo() von EditorNode3DGizmoPlugin ist jetzt _create_gizmo() (beachten Sie den führenden Unterstrich, der eine virtuelle Methode kennzeichnet).

  • Die Methode get_peer_port() von ENetMultiplayerPeer ist jetzt get_peer().

  • Die Methode get_mode() von FileDialog ist jetzt get_file_mode().

  • Die Methode set_mode() von FileDialog ist jetzt set_file_mode().

  • Die Methode get_offset() von GraphNode ist jetzt get_position_offset().

  • Die Methode world_to_map() von GridMap ist jetzt local_to_map().

  • Die Methode map_to_world() von GridMap ist jetzt map_to_local().

  • Die Methode get_rect() von Image ist jetzt get_region().

  • Die Methode get_v_scroll() von ItemList ist jetzt get_v_scroll_bar().

  • Die Methode get_network_connected_peers() von MultiPlayerAPI ist jetzt get_peers().

  • Die Methode get_network_peer() von MultiPlayerAPI ist jetzt get_peer().

  • Die Methode get_network_unique_id() von MultiPlayerAPI ist jetzt get_unique_id().

  • Die Methode has_network_peer() von MultiPlayerAPI ist jetzt has_multiplayer_peer().

  • Die Methode is_listening() von PacketPeerUDP ist jetzt is_bound().

  • Die Methode listen() von PacketPeerUDP ist jetzt bind().

  • Die Methode set_flag() von ParticleProcessMaterial ist jetzt set_particle_flag().

  • Die Methode get_dependencies() von ResourceFormatLoader heißt jetzt _get_dependencies() (beachten Sie den führenden Unterstrich, der eine virtuelle Methode kennzeichnet).

  • Die Methode change_scene() von SceneTree ist jetzt change_scene_to_file().

  • Die Methode is_valid() von Shortcut ist jetzt has_valid_event().

  • Die Methode world_to_map() von TileMap ist jetzt local_to_map().

  • Die Methode map_to_world() von TileMap ist jetzt map_to_local().

Propertys

Bemerkung

Wenn eine Property hier aufgeführt ist, müssen die zugehörigen Getter- und Setter-Methoden ebenfalls manuell umbenannt werden, wenn sie im Projekt verwendet werden. Zum Beispiel müssen die Methoden set_offset() und get_offset() von PathFollow2D und PathFollow3D umbenannt werden in set_progress() bzw. get_progress().

  • Die Property margin von Control ist jetzt offset.

  • Die Property percent_visible von Label ist jetzt visible_ratio.

  • Die Property refuse_new_network_connections von MultiPlayerAPI ist jetzt refuse_new_connections.

  • Die Property offset von PathFollow2D und PathFollow3D ist jetzt progress.

  • Die Property percent_visible von TextureProgressBar ist jetzt show_percentage.

  • Die Property Extents auf CSG-Knoten und VoxelGI muss durch size ersetzt werden, wobei der eingestellte Wert halbiert wird (da es sich nicht mehr um Halb-Extents handelt). Dies betrifft auch die Setter/Getter-Methoden set_extents() und get_extents().

  • Die Proprty Engine.editor_hint wurde zugunsten der Engine.is_editor_hint()-Methode entfernt. Der Grund dafür ist, dass sie schreibgeschützt ist, und Propertys in Godot nicht für schreibgeschützte Werte verwendet werden.

Enums

  • Das Enum FLAG_MAX von CPUParticles2D ist jetzt PARTICLE_FLAG_MAX.

Signale

  • Das Signal instantiate von FileSystemDock ist jetzt instance.

  • Das Signal hide von CanvasItem ist jetzt hidden. Diese Umbenennung bezieht sich nicht auf die Methode hide(), nur auf das Signal.

  • Das Signal tween_all_completed von Tween ist jetzt loop_finished.

  • Das Signal changed von EditorSettings ist jetzt settings_changed.

Konstanten

  • Farbnamen werden jetzt in Großbuchstaben geschrieben, und zwischen den Wörtern werden Unterstriche verwendet. Zum Beispiel heißt Color.palegreen jetzt Color.PALE_GREEN.

  • Die NOTIFICATION_-Konstanten von MainLoop wurden in Node dupliziert, was bedeutet, daß man das Präfix MainLoop. entfernen kann, wenn man auf sie verweist.

  • Die Konstante NOTIFICATION_WM_QUIT_REQUEST von MainLoop ist jetzt NOTIFICATION_WM_CLOSE_REQUEST.

Überprüfen der Projekteinstellungen

Mehrere Projekteinstellungen wurden umbenannt, und bei einigen von ihnen wurden die Enums auf inkompatible Weise geändert (z. B. Schattenfilterqualität). Das bedeutet, dass Sie möglicherweise die Werte einiger Projekteinstellungen erneut festlegen müssen. Stellen Sie sicher, dass der Schalter Erweitert im Projekteinstellungsdialog aktiviert ist, damit Sie alle Projekteinstellungen sehen können.

Überprüfen der Umgebungseinstellungen

Die Einstellungen für die Grafikqualität wurden von den Umgebungs-Propertys in die Projekteinstellungen verschoben. Dies wurde getan, um Qualitätsanpassungen während der Laufzeit zu erleichtern, ohne auf die derzeit aktive Umgebungsressource zugreifen und deren Eigenschaften ändern zu müssen.

Infolgedessen müssen Sie die Einstellungen für die Umgebungsqualität in den Projekteinstellungen konfigurieren, da die alten Einstellungen für die Umgebungsqualität nicht automatisch in die Projekteinstellungen konvertiert werden.

Wenn Sie ein Grafikeinstellungsmenü haben, das die Umgebungseigenschaften in Godot 3.x geändert hat, müssen Sie seinen Code ändern, um RenderingServer-Methoden aufzurufen, von der die Qualität der Umgebungseffekte beeinflusst wird. Nur der "Basis"-Schalter jedes Umgebungseffekts und seine visuellen Regler verbleiben in der Ressource Umgebung.

Shader upgraden

Es wurden einige Änderungen an Shadern vorgenommen, die nicht durch das Upgrade-Tool abgedeckt werden.

Die Dateierweiterung .shader wird nicht mehr unterstützt, d.h. Sie müssen .shader-Dateien in .gdshader umbenennen und Verweise in Szenen-/Ressourcendateien mit einem externen Texteditor entsprechend aktualisieren.

Einige nennenswerte Umbenennungen, die Sie in Shadern vornehmen müssen, sind:

  • Texturfilter- und Wiederholungsmodi werden jetzt für einzelne Uniforms und nicht mehr für die Texturdateien selbst festgelegt.

  • Die Property hint_albedo ist jetzt source_color.

  • Built-in-Matrixvariablen wurden umbenannt.

  • Partikel-Shader benutzen nicht mehr die Vertex()-Prozessor-Funktion. Stattdessen benutzen sie start() und process().

Siehe Shader-Sprache für weitere Informationen.

Aktualisierung von Skripten zur Berücksichtigung von abwärtskompatiblen Änderungen

Bei einigen Änderungen zwischen Godot 3.x und 4 handelt es sich zwar nicht um Umbenennungen, aber die Abwärtskompatibilität wird aufgrund des unterschiedlichen Standardverhaltens dennoch gebrochen.

Die nennenswertesten Beispiele hierfür sind:

  • Lebenszyklusfunktionen wie _ready() und _process() rufen nicht mehr implizit Funktionen der Parent-Klasse auf, die den gleichen Namen haben. Stattdessen müssen Sie super() am Anfang einer Lebenszyklusfunktion in der Child-Klasse verwenden, damit die Funktion der Parent-Klasse zuerst aufgerufen wird.

  • Sowohl String als auch StringName sind jetzt für GDScript verfügbar. Dies ermöglicht eine größere Optimierung, da StringName speziell für "konstante" Zeichenketten entwickelt wurde, die einmal erstellt und viele Male wiederverwendet werden. Diese Typen sind nicht streng äquivalent zueinander, was bedeutet, dass is_same("example", &"example") den Wert false zurückgibt. Obwohl sie in den meisten Fällen austauschbar sind ("example" == &"example" gibt true zurück), kann es sein, dass Sie "example" durch &"example" ersetzen müssen.

  • GDScript setter und getter-Syntax wurde geändert, wird aber nur teilweise vom Konvertierungswerkzeug umgesetzt. In den meisten Fällen sind manuelle Änderungen erforderlich, damit Setter und Getter wieder funktionieren.

  • GDScript-Signalverbindungssyntax wurde geändert. Das Konvertierungswerkzeug verwendet die auf Zeichenketten basierende Syntax, die in Godot 4 noch vorhanden ist, aber es wird empfohlen, auf die Signal-basierte Syntax umzustellen, die auf der verlinkten Seite beschrieben ist. Auf diese Weise sind keine Strings mehr involviert, was Probleme mit Signal-Namensfehlern vermeidet, die nur zur Laufzeit entdeckt werden können.

  • Built-in-Skripte, die Tool-Skripte sind, bekommen das tool Schlüsselwort nicht in die @tool Annotation umgewandelt.

  • Der Tween-Node wurde zugunsten von Tweenern entfernt, die auch in Godot 3.5 und höher verfügbar sind. Siehe den Original-Pull-Request für Details.

  • randomize() wird nun automatisch beim Laden des Projekts aufgerufen, so dass deterministische Zufälligkeit mit der globalen RandomNumberGenerate-Instanz das manuelle Setzen eines Seeds in der _ready() Funktion eines Skripts erfordert.

  • call_group(), set_group() und notify_group() sind nun standardmäßig "immediate". Wenn eine teure Funktion aufgerufen wird, kann dies bei einer Gruppe, die eine große Anzahl von Nodes enthält, zu Stuttering führen. Um aufgeschobene Aufrufe wie bisher zu verwenden, ersetzen Sie call_group(...) durch call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...) (und machen Sie dasselbe mit set_group() bzw. notify_group()).

  • Anstelle von rotation_degrees wird die Eigenschaft rotation dem Editor zur Verfügung gestellt, die im Inspektor-Dock automatisch in Grad angezeigt wird. Dies kann Animationen kaputtmachen, da die Konvertierung nicht automatisch vom Konvertierungstool durchgeführt wird.

  • Die Methode has_no_surface() von AABB wurde invertiert und in has_surface() umbenannt.

  • Die Methode has_no_area() von AABB und Rect2 wurde invertiert und in has_area() umbenannt.

  • Die Property fps von AnimatedTexture wurde durch speed_scale ersetzt, die genauso funktioniert wie die Property playback_speed von AnimationPlayer .

  • AnimatedSprite2D und AnimatedSprite3D erlauben nun negative speed_scale-Werte. Das kann Animationen kaputt machen, wenn man sich darauf verlässt, dass speed_scale intern auf 0.0 geclampt ist.

  • Die Property playing von AnimatedSprite2D und AnimatedSprite3D wurde entfernt. Benutzen Sie stattdessen die play()/stop()-Methode ODER konfigurieren Sie die autoplay-Animation über das SpriteFrames im unteren Bedienfeld (aber nicht beides gleichzeitig).

  • Der zweite Parameter (end) der Methode slice() von Array ist nun exklusiv, anstatt inklusiv. Das bedeutet zum Beispiel, dass [1, 2, 3].slice(0, 1) jetzt [1] statt [1, 2] zurückliefert.

  • Die Signale von BaseButton sind jetzt button_up und button_down. Die Property pressed ist jetzt button_pressed.

  • Die Property rotating von Camera2D wurde durch ignore_rotation ersetzt, die invertiertes Verhalten aufweist.

  • Die Property zoom von Camera2D wurde invertiert: Größere Werte zoomen jetzt weiter herein, statt weiter heraus.

  • Die Methode remove_and_skip() von Node wurde entfernt. Wenn Sie sie in einem Skript neu implementieren müssen, können Sie die alte C++-Implementierung als Referenz verwenden.

  • OS.get_system_time_secs() sollte zu Time.get_time_dict_from_system()["second"] konvertiert werden.

  • Die Argumente der Methode save() von ResourceSaver wurden vertauscht (resource: Resource, path: String). Dies gilt auch für die _save()-Methode von ResourceFormatSaver.

  • Man muss poll() auf ein StreamPeerTCP aufrufen, um seinen Zustatnd zu aktualisieren, statt sich darauf zu verlassen, dass get_status() automatisch ein Polling durchführt: GH-59582

  • Die right()-Methode von String hat ein geändertes Verhalten: Sie liefert jetzt eine Anzahl von Zeichen vom rechten Ende eines Strings zurück, statt von der rechten Seite des Strings ab einer bestimmten Position. Wenn Sie das alte Verhalten benötigen, können Sie stattdessen substr() verwenden.

  • is_connected_to_host() wurde über GH-59582 von StreamPeerTCP und PacketPeerUDP entfernt. Stattdessen kann get_status() in StreamPeerTCP verwendet werden. is_socket_connected() kann stattdessen in PacketPeerUDP verwendet werden.

  • In _get_property_list() ist der Property-Hint-String or_lesser jetzt or_less.

  • In _get_property_list() ist der Property-Hint-String noslider jetzt no_slider.

  • VisualShaderNodeVec4Parameter nimmt jetzt einen Vector4 als Parameter anstelle eines Quaternion.

Entfernte oder ersetzte Nodes/Ressourcen

Hier werden alle Nodes aufgelistet, die durch einen anderen Node ersetzt wurden, der eine andere Konfiguration erfordert. Die Einrichtung muss von Grund auf neu vorgenommen werden, da der Projektkonverter die Aktualisierung bestehender Einrichtungen nicht unterstützt:

Entfernter Node

Näheste Entsprechung

Kommentar

AnimationTreePlayer

AnimationTree

Der AnimationTreePlayer ist seit Godot 3.1 deprecated.

BakedLightmap

LightmapGI

Siehe Verwenden der Lightmap-Global Illumination.

BakedLightmapData

LightmapGIData

BitmapFont

FontFile

Siehe Verwenden von Schriftarten.

DynamicFont

FontFile

DynamicFontData

FontFile

Navigation2D

Node2D

Ersetzt durch andere 2D Navigations-Nodes.

Navigation3D

Node3D

Ersetzt durch andere 3D Navigations-Nodes.

OpenSimplexNoise

FastNoiseLite

Verfügt über verschiedene Parameter und weitere Rauscharten wie zellulares Rauschen. Keine Unterstützung für 4D-Rauschen, da es in der FastNoiseLite-Bibliothek nicht enthalten ist.

ToolButton

Button

ToolButton war Button mit der standardmäßig aktivierten Property Flat.

YSort

Node2D oder Control

CanvasItem hat in Version 4.0 eine neue Property Y-Sortierung aktiviert.

ProximityGroup

Node3D

VisibleOnScreenNotifier3D kann als Ersatz dienen.

Portal

Node3D

Portal- und Raum-Occlusion-Culling wurde durch Raster-Occlusion-Culling (OccluderInstance3D-Node) ersetzt, was einen anderen Setup-Prozess erfordert.

Room

Node3D

RoomManager

Node3D

RoomGroup

Node3D

Occluder

Node3D

Geometrie-Occlusion-Culling wurde durch Raster-Occlusion-Culling (OccluderInstance3D-Node) ersetzt, was einen anderen Setup-Prozess erfordert.

OccluderShapeSphere

Resource

Wenn Sie ein altes Projekt laden, wird der Node automatisch durch seine näheste Entsprechung ersetzt (auch wenn Sie das Projekt-Upgrade-Tool nicht verwenden).

Änderungen am Threading

Threading-APIs haben sich in 4.0 geändert. Zum Beispiel muss der folgende Codeschnipsel in Godot 3.x geändert werden, um in 4.0 zu funktionieren:

# 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() wird nicht mehr verwendet und sollte in Thread.is_alive() umgewandelt werden.

Siehe auch

Eine vollständige Liste der Änderungen zwischen Godot 3.x und 4 finden Sie im Changelog.

ArrayMesh Ressourcen-Kompatibilitätsbruch

Wenn Sie eine ArrayMesh-Ressource in einer .res oder .tres Datei gespeichert haben, ist das in 4.0 verwendete Format nicht mit dem in 3.x verwendeten kompatibel. Sie müssen den Prozess des Importierens der Quell-Mesh-Datei und des Speicherns als ArrayMesh-Ressource erneut durchlaufen.

Liste der automatisch umbenannten Methoden, Eigenschaften, Signale und Konstanten

Die Quelldatei editor/renames_map_3_to_4.cpp listet alle automatischen Umbenennungen auf, die das Projekt-Upgrade-Tool durchführt. Auskommentierte Zeilen beziehen sich auf API-Umbenennungen, die nicht automatisch durchgeführt werden können.

Portierung von Editoreinstellungen

Godot 3.x und 4.0 verwenden verschiedene Editor-Einstellungsdateien. Das bedeutet, dass ihre Einstellungen unabhängig voneinander geändert werden können.

Wenn Sie Ihre Godot 3.x-Einstellungen nach Godot 4 portieren möchten, öffnen Sie den Ordner für die Editor-Einstellungen und kopieren Sie editor_settings-3.tres nach editor_settings-4.tres, während der Godot 4-Editor geschlossen ist.

Bemerkung

Die Namen und Kategorien vieler Einstellungen haben sich seit Godot 3.x geändert. Editor-Einstellungen, deren Name oder Kategorie sich geändert hat, werden nicht in Godot 4.0 übernommen; Sie müssen die Werte erneut einstellen.