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:
Öffnen Sie den Godot 4-Projektmanager.
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.
Doppelklicken Sie auf das importierte Projekt (oder markieren Sie das Projekt und wählen Sie Bearbeiten).
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.
Warten Sie, bis der Projektkonvertierungsprozess abgeschlossen ist. Dies kann bei großen Projekten mit vielen Szenen bis zu einigen Minuten dauern.
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 FormDisplayServer.<Objekt>_<get/set>_property()
zu verwenden. Zum Beispiel wirdOS.get_screen_size()
zuDisplayServer.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 durchinstantiate()
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 jetztset_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 jetztget_points_id()
.Die Methode
set_event()
von BaseButton ist jetztset_shortcut()
.Die Methode
get_v_offset()
von Camera2D ist jetztget_drag_vertical_offset()
.Die Methode
set_v_offset()
von Camera2D ist jetztset_drag_vertical_offset()
.Die Methode
update()
von CanvasItem ist jetztqueue_redraw()
.Die Methode
set_tooltip()
von Control ist jetztset_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 jetztget_peer()
.Die Methode
get_mode()
von FileDialog ist jetztget_file_mode()
.Die Methode
set_mode()
von FileDialog ist jetztset_file_mode()
.Die Methode
get_offset()
von GraphNode ist jetztget_position_offset()
.Die Methode
world_to_map()
von GridMap ist jetztlocal_to_map()
.Die Methode
map_to_world()
von GridMap ist jetztmap_to_local()
.Die Methode
get_rect()
von Image ist jetztget_region()
.Die Methode
get_v_scroll()
von ItemList ist jetztget_v_scroll_bar()
.Die Methode
get_network_connected_peers()
von MultiPlayerAPI ist jetztget_peers()
.Die Methode
get_network_peer()
von MultiPlayerAPI ist jetztget_peer()
.Die Methode
get_network_unique_id()
von MultiPlayerAPI ist jetztget_unique_id()
.Die Methode
has_network_peer()
von MultiPlayerAPI ist jetzthas_multiplayer_peer()
.Die Methode
is_listening()
von PacketPeerUDP ist jetztis_bound()
.Die Methode
listen()
von PacketPeerUDP ist jetztbind()
.Die Methode
set_flag()
von ParticleProcessMaterial ist jetztset_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 jetztchange_scene_to_file()
.Die Methode
is_valid()
von Shortcut ist jetzthas_valid_event()
.Die Methode
world_to_map()
von TileMap ist jetztlocal_to_map()
.Die Methode
map_to_world()
von TileMap ist jetztmap_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 jetztoffset
.Die Property
percent_visible
von Label ist jetztvisible_ratio
.Die Property
refuse_new_network_connections
von MultiPlayerAPI ist jetztrefuse_new_connections
.Die Property
offset
von PathFollow2D und PathFollow3D ist jetztprogress
.Die Property
percent_visible
von TextureProgressBar ist jetztshow_percentage
.Die Property
Extents
auf CSG-Knoten und VoxelGI muss durchsize
ersetzt werden, wobei der eingestellte Wert halbiert wird (da es sich nicht mehr um Halb-Extents handelt). Dies betrifft auch die Setter/Getter-Methodenset_extents()
undget_extents()
.Die Proprty
Engine.editor_hint
wurde zugunsten derEngine.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 jetztPARTICLE_FLAG_MAX
.
Signale
Das Signal
instantiate
von FileSystemDock ist jetztinstance
.Das Signal
hide
von CanvasItem ist jetzthidden
. Diese Umbenennung bezieht sich nicht auf die Methodehide()
, nur auf das Signal.Das Signal
tween_all_completed
von Tween ist jetztloop_finished
.Das Signal
changed
von EditorSettings ist jetztsettings_changed
.
Konstanten
Farbnamen werden jetzt in Großbuchstaben geschrieben, und zwischen den Wörtern werden Unterstriche verwendet. Zum Beispiel heißt
Color.palegreen
jetztColor.PALE_GREEN
.Die
NOTIFICATION_
-Konstanten von MainLoop wurden inNode
dupliziert, was bedeutet, daß man das PräfixMainLoop.
entfernen kann, wenn man auf sie verweist.Die Konstante
NOTIFICATION_WM_QUIT_REQUEST
von MainLoop ist jetztNOTIFICATION_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 jetztsource_color
.Partikel-Shader benutzen nicht mehr die
Vertex()
-Prozessor-Funktion. Stattdessen benutzen siestart()
undprocess()
.
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 Siesuper()
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 Wertfalse
zurückgibt. Obwohl sie in den meisten Fällen austauschbar sind ("example" == &"example"
gibttrue
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()
undnotify_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 Siecall_group(...)
durchcall_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)
(und machen Sie dasselbe mitset_group()
bzw.notify_group()
).Anstelle von
rotation_degrees
wird die Eigenschaftrotation
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 inhas_surface()
umbenannt.Die Methode
has_no_area()
von AABB und Rect2 wurde invertiert und inhas_area()
umbenannt.Die Property
fps
von AnimatedTexture wurde durchspeed_scale
ersetzt, die genauso funktioniert wie die Propertyplayback_speed
von AnimationPlayer .AnimatedSprite2D und AnimatedSprite3D erlauben nun negative
speed_scale
-Werte. Das kann Animationen kaputt machen, wenn man sich darauf verlässt, dassspeed_scale
intern auf0.0
geclampt ist.Die Property
playing
von AnimatedSprite2D und AnimatedSprite3D wurde entfernt. Benutzen Sie stattdessen dieplay()
/stop()
-Methode ODER konfigurieren Sie dieautoplay
-Animation über das SpriteFrames im unteren Bedienfeld (aber nicht beides gleichzeitig).Der zweite Parameter (
end
) der Methodeslice()
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
undbutton_down
. Die Propertypressed
ist jetztbutton_pressed
.Die Property
rotating
von Camera2D wurde durchignore_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 zuTime.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, dassget_status()
automatisch ein Polling durchführt: GH-59582Die
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 stattdessensubstr()
verwenden.is_connected_to_host()
wurde über GH-59582 von StreamPeerTCP und PacketPeerUDP entfernt. Stattdessen kannget_status()
in StreamPeerTCP verwendet werden.is_socket_connected()
kann stattdessen in PacketPeerUDP verwendet werden.In
_get_property_list()
ist der Property-Hint-Stringor_lesser
jetztor_less
.In
_get_property_list()
ist der Property-Hint-Stringnoslider
jetztno_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 |
|
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.