Обновление с Godot 4.4 на Godot 4.5
Для большинства игр и приложений сделанных на Godot 4.4, переход на 4.5 будет относительно безопасным. Эта страница нужна, для того, чтобы показать, на что обратить внимание при переходе вашего проекта.
Изменения ломающие обратную совместимость
Если вы переходите с версии 4.4 на 4.5, перечисленные здесь критические изменения могут вас затронуть. Изменения сгруппированы по областям/системам.
Предупреждение
Для поддержки новых требований Google Play Android теперь требует использования .NET 9 при экспорте проектов C# в Android, другие платформы продолжают использовать .NET 8 в качестве минимально необходимой версии, но более новые версии поддерживаются и приветствуются.
Если вы используете C# в своем проекте и хотите экспортировать его на Android, вам потребуется обновить свой проект до .NET 9 инструкции см. в разделе Обновление до новой версии .NET).
Эта статья показывает, где каждое изменение обратной совместимости влияет на GDScript и где изменение обратной совместимости C# бинарно совместимо или совместимо на уровне кода:
Binary compatible (Совместимость на уровне двоичных файлов) — Существующие двоичные файлы будут успешно загружены и выполнены без перекомпиляции, а поведение среды выполнения не изменится.
Совместимо на уровне кода - Исходный код будет успешно компилироваться без изменений при обновлении Godot.
Ядро
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
JSONRPC |
||||
Method |
❌ |
❌ |
❌ |
|
Node |
||||
Метод |
❌ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
Отрисовка
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
DisplayServer |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
RenderingDevice |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
RenderingServer |
||||
Метод |
❌ |
✔️ |
✔️ |
|
Метод |
❌ |
✔️ |
✔️ |
Примечание
In C#, the enum RenderingDevice.Features breaks compatibility because of the way the bindings generator
detects the enum prefix. New members were added to the enum in GH-103941 that caused the enum member
Address to be renamed to BufferDeviceAddress.
GLTF
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
GLTFAccessor |
||||
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
GLTFBufferView |
||||
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
|
Свойство |
✔️ |
❌ |
❌ |
Примечание
В результате изменения типа метаданных связывания C# изменили тип с int (32-байта) на long (64-байта).
Текст
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
CanvasItem |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Font |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
RichTextLabel |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
TextLine |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
TextParagraph |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
TextServer |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
TreeItem |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
TextServerExtension |
||||
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
XR
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
OpenXRAPIExtension |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
Метод |
✔️ |
✔️ |
✔️ |
|
OpenXRBindingModifierEditor |
||||
Тип |
❌ |
❌ |
❌ |
|
OpenXRInteractionProfileEditor |
||||
Тип |
❌ |
❌ |
❌ |
|
OpenXRInteractionProfileEditorBase |
||||
Тип |
❌ |
❌ |
❌ |
Примечание
Классы OpenXRBindingModifierEditor, OpenXRInteractionProfileEditor, и OpenXRInteraction ProfileEditorBase доступны только в редакторе. Использование их за пределами редактора приведет к ошибке компиляции.
В C# это означает, что типы перемещаются из сборки GodotSharp в сборку GodotSharpEditor. Убедитесь, что обертывание кода, который использует эти типы в блоке #if TOOLS, чтобы убедиться, что они не включены в экспортируемую игру.
Это изменение также было перенесено на пункт 4.4.1.
Плагины редактора
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
EditorExportPlatform |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
EditorUndoRedoManager |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
EditorExportPlatformExtension |
||||
Метод |
✔️ |
❌ |
❌ |
Изменения в поведении
In 4.5, some behavior changes have been introduced, which might require you to adjust your project.
TileMapLayer
TileMapLayer.get_coords_for_body_rid() будет возвращать другие значения в 4.5, в сравнении с 4.4, так как по умолчанию в TileMapLayer включено деление физики на части. Более высокие значения параметра TileMapLayer.physics_quadrant_size сделают эту функцию менее точной. Чтобы получить точные координаты ячейки, как в версии 4.4 и предыдущих версиях, вам необходимо установить TileMapLayer.physics_quadrant_size на значение 1, что отключает разбиение физики на блоки.
Импорт 3D-модели
Внесено исправление в импортеры 3D-моделей для корректной обработки несочлененных узлов в иерархии скелета (GH-104184). Для сохранения совместимости по умолчанию импортируются существующие файлы с тем же поведением, что и раньше (GH-107352). Новые файлы .gltf, .glb, .blend и .fbx (без соответствующего файла .import) будут импортированы с новым поведением. Однако для использования нового поведения для существующих файлов необходимо изменить параметр "Naming Version" в нижней части панели импорта:
Ядро
Примечание
Resource.duplicate(true) (which performs deep duplication) now only duplicates resources internal to the resource file it's called on. In 4.4, this duplicated everything instead, including external resources. If you were deep-duplicating a resource that contained references to other external resources, those external resources aren't duplicated anymore. You must call Resource.duplicate_deep(DEEP_DUPLICATE_ALL) instead to keep the old behavior.
Примечание
ProjectSettings.add_property_info()
now prints a warning when the dictionary parameter has missing keys or invalid keys.
Most importantly, it will now warn when a usage key is passed, as this key is not used.
This was also the case before 4.5, but it was silently ignored instead.
As a reminder, to set property usage information correctly, you must use
ProjectSettings.set_as_basic(),
ProjectSettings.set_restart_if_changed(),
or ProjectSettings.set_as_internal() instead.
Примечание
В C# StringExtensions.PathJoin теперь избегает добавления дополнительного разделителя пути, если исходная строка пуста или если добавленный путь начинается с разделителя пути (GH-105281).
Примечание
In C#, StringExtensions. GetExtension теперь возвращает пустую строку вместо оригинальной строки, когда оригинальная строка не содержит расширения (GH-108041).
Примечание
В C# Quaternion (Vector3, Vector3) конструктор теперь правильно создает кватернион (quaternion), представляющий кратчайшую дугу между двумя входными векторами. Ранее он возвращал неправильные значения для определенных входов (GH-107618).
Физика
Примечание
Когда 3D-двигатель физики настроен на Jolt Physics, теперь вы всегда будете иметь перекрытие между Area3D и статическими телами, сообщаемыми по умолчанию, так как physics/jolt_physics_3d/simulation/areas_ detection_static_bodies был удален (GH-105746). Если вы все еще хотите, чтобы такие совпадения игнорировались, вам нужно будет изменить маску столкновения или слой Area3D или статического тела вместо этого.
Текст
Примечание
В GDScript вызовы функций RichTextLabel::add_image и RichTextLabel::update_image продолжат работать, но аргумент size_in_percent теперь будет использоваться в качестве значения width_in_percent, а height_in_percent по умолчанию будет иметь значение false (GH-107347). Чтобы восстановить прежнее поведение, можно явно задать height_in_percent то же значение, которое передавалось как size_in_percent.