Оновлення з Godot 4.4 до Godot 4.5
Для більшості ігор та програм, створених з версії 4.4, перехід на версію 4.5 має бути відносно безпечним. На цій сторінці викладено все, на що потрібно звернути увагу під час перенесення вашого проєкту.
Ломальні зміни
Якщо ви переходите з версії 4.4 на 4.5, перелічені тут критичні зміни можуть вплинути на вас. Зміни згруповано за областями/системами.
Попередження
Для підтримки нових вимог Google Play Android тепер вимагає націлювання на .NET 9 під час експорту проектів C# на Android, інші платформи продовжують використовувати .NET 8 як мінімально необхідну версію, але новіші версії підтримуються і рекомендуються.
Якщо ви використовуєте C# у своєму проєкті та хочете експортувати дані на Android, вам потрібно буде оновити свій проєкт до .NET 9 (див. інструкції в розділі Оновлення до нової версії .NET).
У цій статті вказується, чи кожна порушна зміна впливає на GDScript і чи є порушна зміна C# бінарною сумісністю чи сумісною з джерелом:
Сумісність з бінарними файлами – Існуючі бінарні файли успішно завантажаться та виконаються без перекомпіляції, а поведінка під час виконання не зміниться.
Сумісність із вихідним кодом – вихідний код буде успішно скомпільовано без змін під час оновлення Godot.
Ядро
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
JSONRPC |
||||
Method |
❌ |
❌ |
❌ |
|
вузол |
||||
Метод |
❌ |
|||
Метод |
✔️ |
Рендеринг
Зміна |
Сумісність з 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 |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Шрифт |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
RichTextLabel |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
TextLine |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
TextParagraph |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
TextServer |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
TreeItem |
||||
Метод |
✔️ |
|||
TextServerExtension |
||||
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
XR
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
OpenXRAPIExtension |
||||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
Метод |
✔️ |
|||
OpenXRBindingModifierEditor |
||||
Тип API |
❌ |
❌ |
❌ |
|
OpenXRInteractionProfileEditor |
||||
Тип API |
❌ |
❌ |
❌ |
|
OpenXRInteractionProfileEditorBase |
||||
Тип API |
❌ |
❌ |
❌ |
Примітка
Класи OpenXRBindingModifierEditor, OpenXRInteractionProfileEditor, в OpenXRInteractionProfileEditorBase доступні лише в редакторі. Їх використання поза редактором призведе до помилки компіляції.
У 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()
will return different values in 4.5 compared to 4.4,
as TileMapLayer physics chunking is enabled by default. Higher values of
TileMapLayer.physics_quadrant_size
will make this function less precise. To get the exact cell coordinates like in 4.4 and prior
versions, you need to set
TileMapLayer.physics_quadrant_size
to 1, which disables physics chunking.
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(RESOURCE_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).
Примітка
У C#, StringExtensions.GetExtension тепер повертає порожній рядок замість оригінального рядка, якщо оригінальний рядок не містить розширення (GH-108041).
Примітка
У C# конструктор Quaternion(Vector3, Vector3) тепер правильно створює кватерніон, що представляє найкоротшу дугу між двома вхідними векторами. Раніше він повертав неправильні значення для певних вхідних даних (GH-107618).
Фізика
Примітка
Коли 3D-фізичний движок налаштований на Jolt Physics, тепер ви завжди будете бачити перекриття між Area3D і статичними тілами, про які повідомляється за замовчуванням, оскільки налаштування проекту physics/jolt_physics_3d/simulation/areas_detect_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.