Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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
Along with the new features present in 4.0, upgrading gives the following advantages:
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.
See Änderungsprotokoll der Dokumentation for a list of pages documenting new features in Godot 4.0, and Featureliste for a list of all features in Godot.
Nachteile des Upgrades
If you don't need any features present in Godot 4.x, you may want to stay on Godot 3.x for the following reasons:
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 does not and will not have support for GLES2 rendering. (There is still support for GLES3 rendering using the new Compatibility renderer, which means that devices without Vulkan support can still run Godot 4.)
Wenn Sie für sehr alte Hardware wie Intel Sandy Bridge (2. Generation) Integrated Graphics entwickeln, 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.
By default, rendering in 2D is no longer performed in HDR, which means "overbright" modulate values have no visible effect. Since Godot 4.2, you can enable the project setting HDR 2D to perform 2D rendering in HDR. See also Verwendung von Glow in 2D.
While rendering still happens in HDR in 3D when using the Forward+ or Mobile renderers, Viewports cannot return HDR data anymore. This is planned to be restored at some point in the future.
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
Gefahr
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-Nodes, 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 Nodes 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 |
BoxShape |
BoxShape3D |
CapsuleShape |
CapsuleShape3D |
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).AnimationPlayer's
add_animation()is nowadd_animation_library()and now uses an AnimationLibrary.AnimationTree's
set_process_mode()is nowset_process_callback().Array's
empty()is nowis_empty().Array's
invert()is nowreverse().Array's
remove()is nowremove_at().Die Methode
get_points()von AStar2D und AStar3D ist jetztget_points_id().Die Methode
set_event()von BaseButton ist jetztset_shortcut().Camera2D's
get_h_offset()is nowget_drag_horizontal_offset().Die Methode
get_v_offset()von Camera2D ist jetztget_drag_vertical_offset().Camera2D's
set_h_offset()is nowset_drag_horizontal_offset().Die Methode
set_v_offset()von Camera2D ist jetztset_drag_vertical_offset().CanvasItem's
raise()is nowmove_to_front().Die Methode
update()von CanvasItem ist jetztqueue_redraw().Control's
get_stylebox()is nowget_theme_stylebox().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
map_to_world()von GridMap ist jetztmap_to_local().Die Methode
world_to_map()von GridMap ist jetztlocal_to_map().Die Methode
get_rect()von Image ist jetztget_region().ImmediateGeometry's
set_normal()is nowsurface_set_normal().ImmediateMesh's
set_color()is nowsurface_set_color().ImmediateMesh's
set_uv()is nowsurface_set_uv().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().MultiplayerAPI's
is_refusing_new_network_connections()is nowis_refusing_new_connections().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().PhysicsTestMotionResult2D's
get_motion()is nowget_travel().RenderingServer's
get_render_info()is nowget_rendering_info().Die Methode
get_dependencies()von ResourceFormatLoader heißt jetzt_get_dependencies()(beachten Sie den führenden Unterstrich, der eine virtuelle Methode kennzeichnet).ResourceFormatLoader's
load()is now_load().Die Methode
change_scene()von SceneTree ist jetztchange_scene_to_file().Die Methode
is_valid()von Shortcut ist jetzthas_valid_event().Die Methode
map_to_world()von TileMap ist jetztmap_to_local().Die Methode
world_to_map()von TileMap ist jetztlocal_to_map().Transform2Ds
xform()istmat * vecundxform_inv()istvec * mat.XRPositionalTracker's
get_name()is nowget_tracker_name().XRPositionalTracker's
get_type()is nowget_tracker_type().XRPositionalTracker's
_set_name()is nowget_tracker_name().
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().
AudioServer's
deviceis nowoutput_device.BaseButton's
groupis nowbutton_group.Camera3D's
zfaris nowfar.Camera3D's
znearis nownearDie Property
marginvon Control ist jetztoffset.InputEventMouseButton's
doubleclickis nowdouble_click.InputEventWithModifiers's
altis nowalt_pressed.InputEventWithModifiers's
commandis nowcommand_pressed.InputEventWithModifiers's
controlis nowctrl_pressed.InputEventWithModifiers's
metais nowmeta_pressed.InputEventWithModifiers's
shiftis nowshift_pressed.Die Property
percent_visiblevon Label ist jetztvisible_ratio.Die Property
refuse_new_network_connectionsvon MultiPlayerAPI ist jetztrefuse_new_connections.Node's
filenameis nowscene_file_path.PathFollow2D's
rotateis nowrotates.Die Property
offsetvon PathFollow2D und PathFollow3D ist jetztprogress.RectangleShape2D's
extentsis nowsizeDie Property
percent_visiblevon TextureProgressBar ist jetztshow_percentage.Theme's
offis nowunchecked.Theme's
ofsis nowoffset.Theme's
onis nowchecked.Window's
window_titleis nowtitle.WorldMarginShape2D's
dis nowdistance.Die Property
Extentsauf CSG-Knoten und VoxelGI muss durchsizeersetzt 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_hintwurde 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_MAXvon CPUParticles2D ist jetztPARTICLE_FLAG_MAX.
Signale
Das Signal
instantiatevon FileSystemDock ist jetztinstance.Das Signal
hidevon CanvasItem ist jetzthidden. Diese Umbenennung bezieht sich nicht auf die Methodehide(), nur auf das Signal.Das Signal
tween_all_completedvon Tween ist jetztloop_finished.Das Signal
changedvon 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.palegreenjetztColor.PALE_GREEN.Die
NOTIFICATION_-Konstanten von MainLoop wurden inNodedupliziert, was bedeutet, daß man das PräfixMainLoop.entfernen kann, wenn man auf sie verweist.Die Konstante
NOTIFICATION_WM_QUIT_REQUESTvon 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
Graphics quality settings were moved from Environment properties to project settings. This was done to make runtime quality adjustments easier, without having to access the currently active Environment resource then modify its properties.
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
There have been some changes to shaders that aren't covered by the upgrade tool.
You will need to make some manual changes, especially if your shader uses coordinate
space transformations or a custom light() function.
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.
Some notable changes you will need to perform in shaders are:
Texturfilter- und Wiederholungsmodi werden jetzt für einzelne Uniforms und nicht mehr für die Texturdateien selbst festgelegt.
Die Property
hint_albedoist jetztsource_color.hint_colorist jetztsource_color.Partikel-Shader benutzen nicht mehr die
Vertex()-Prozessor-Funktion. Stattdessen benutzen siestart()undprocess().In the Forward+ and Mobile renderers, normalized device coordinates now have a Z-range of
[0.0,1.0]instead of[-1.0,1.0]. When reconstructing NDC fromSCREEN_UVand depth, usevec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth);instead ofvec3 ndc = vec3(SCREEN_UV, depth) * 2.0 - 1.0;. The Compatibility renderer is unchanged, using the same NDC Z-range as 3.x.The lighting model changed. If your shader has a custom
light()function, you may need to make changes to get the same visual result.In 4.3 and up, the reverse Z depth buffer technique is now implemented, which may break advanced shaders. See Introducing Reverse Z (AKA I'm sorry for breaking your shader).
Siehe Shader-Sprache für weitere Informationen.
This list is not exhaustive. If you made all the changes mentioned here and your shader still doesn't work, try asking for help in one of the community channels.
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" Strings 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 Wertfalsezurückgibt. Obwohl sie in den meisten Fällen austauschbar sind ("example" == &"example"gibttruezurü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 signal connection syntax was changed. The conversion tool will use the string-based syntax which is still present in Godot 4, but it's recommended to switch to the Signal-based syntax described on the linked page. This way, strings are no longer involved, which avoids issues with signal name errors that can only be discovered at runtime.
Built-in-Skripte, die Tool-Skripte sind, bekommen das
toolSchlüsselwort nicht in die@toolAnnotation 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_degreeswird die Eigenschaftrotationdem 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
fpsvon AnimatedTexture wurde durchspeed_scaleersetzt, die genauso funktioniert wie die Propertyplayback_speedvon AnimationPlayer .AnimatedSprite2D und AnimatedSprite3D erlauben nun negative
speed_scale-Werte. Das kann Animationen kaputt machen, wenn man sich darauf verlässt, dassspeed_scaleintern auf0.0geclampt ist.Die Property
playingvon 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_upundbutton_down. Die Propertypressedist jetztbutton_pressed.Die Property
rotatingvon Camera2D wurde durchignore_rotationersetzt, die invertiertes Verhalten aufweist.Die Property
zoomvon 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_lesserjetztor_less.In
_get_property_list()ist der Property-Hint-Stringnosliderjetztno_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 |
|
ClippedCamera |
Camera2D or Camera3D |
Camera's pyramid shape was moved to :ref:'class_Camera3D'. |
InterpolatedCamera |
Camera2D or Camera3D |
|
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
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.
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.
Updating version control settings
Godot 3.x and 4.x have entirely different lists of files and folders that should be ignored by your version control system.