Оновлення з Godot 4.0 до Godot 4.1
Для більшості ігор і програм, створених з версією 4.0, перехід на 4.1 має бути відносно безпечним. На цій сторінці описано все, на що потрібно звернути увагу під час міграції вашого проекту.
Ломальні зміни
Якщо ви переходите з 4.0 на 4.1, перелічені тут критичні зміни можуть вплинути на вас. Зміни згруповано за сферами/системами.
Попередження
API GDExtension повністю порушує сумісність у версії 4.1, тому його не включено в таблицю нижче. Перегляньте розділ Оновлення GDExtension до 4.1 для отримання додаткової інформації.
У цій статті вказується, чи кожна порушна зміна впливає на GDScript і чи є порушна зміна C# бінарною сумісністю чи сумісною з джерелом:
Сумісність із двійковими файлами – наявні двійкові файли завантажуватимуться та успішно виконуватимуться без повторної компіляції, а поведінка під час виконання не зміниться.
Сумісність із вихідним кодом – вихідний код буде успішно скомпільовано без змін під час оновлення Godot.
Ядро
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
Основа |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Об'єкт |
||||
Метод |
✔️ |
❌ |
❌ |
|
Transform3D |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
Відмінити Повторити |
||||
Метод |
✔️ |
✔️ |
||
WorkerThreadPool |
||||
Метод |
✔️ |
❌ |
✔️ |
Анімація
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
AnimationNode |
||||
Метод |
❌ |
❌ |
❌ |
|
Метод |
✔️ |
✔️ |
||
Метод |
✔️ |
✔️ |
||
AnimationNodeStateMachinePlayback |
||||
Метод |
✔️ |
❌ |
❌ |
2D вузли
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
Дотримуйтеся шляху 2D |
||||
Властивість |
❌ |
❌ |
❌ |
3D вузли
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
Geometry3D |
||||
Метод |
✔️ |
❌ |
||
MeshInstance3D |
||||
Метод |
✔️ |
✔️ |
||
Node3D |
||||
Метод |
✔️ |
✔️ |
||
Метод |
✔️ |
✔️ |
Вузли GUI
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
Редагування коду |
||||
Метод |
✔️ |
✔️ |
||
RichTextLabel |
||||
Метод |
✔️ |
✔️ |
||
Метод |
✔️ |
✔️ |
||
Метод |
✔️ |
✔️ |
||
Дерево |
||||
Метод |
✔️ |
✔️ |
Фізика
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
Area2D |
||||
Властивість |
❌ |
❌ |
❌ |
|
Area3D |
||||
Властивість |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState2D |
||||
Метод |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState3D |
||||
Метод |
❌ |
❌ |
❌ |
Рендеринг
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
RDShaderFile |
||||
Метод |
✔️ |
❌ |
❌ |
|
RenderingDevice |
||||
Метод |
✔️ |
❌ |
||
RenderingServer |
||||
Метод |
✔️ |
❌ |
❌ |
|
Інструмент SurfaceTool |
||||
Метод |
✔️ |
❌ |
Робота у мережі
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
WebRTCPeerConnectionExtension |
||||
Метод |
✔️ |
❌ |
✔️ |
Додатки редактора
Зміна |
Сумісність з GDScript |
C# двійковий сумісний |
Сумісність із вихідним кодом C# |
Введено |
|---|---|---|---|---|
Плагін AnimationTrackEdit |
||||
Тип |
❌ |
❌ |
❌ |
|
Інтерфейс редактора |
||||
Тип |
✔️ |
❌ |
❌ |
|
Метод |
✔️ |
❌ |
❌ |
|
Метод |
✔️ |
❌ |
❌ |
|
EditorResourcePreviewGenerator |
||||
Метод |
❌ |
❌ |
❌ |
|
Метод |
❌ |
❌ |
❌ |
|
EditorUndoRedoManager |
||||
Метод |
✔️ |
✔️ |
Зміни поведінки
In 4.1, some behavior changes have been introduced, which might require you to adjust your project.
Зміна |
Введено |
|---|---|
SubViewportContainer |
|
Коли події введення мають досягати SubViewports та їхніх дітей, |
|
Багатошарові вузли |
|
Вікно перегляду |
|
Вузли |
Оновлення GDExtension до 4.1
Щоб виправити серйозну помилку, у Godot 4.1 нам довелося значною мірою порушити двійкову сумісність і меншою мірою сумісність з джерелами.
Це означає, що GDExtensions, створені для Godot 4.0, потрібно буде перекомпілювати для Godot 4.1 (використовуючи гілку 4.1 godot-cpp), з невеликою зміною їх вихідного коду.
У Godot 4.0 ваша функція "entry_symbol" виглядає приблизно так:
GDExtensionBool GDE_EXPORT example_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);
init_obj.register_initializer(initialize_example_module);
init_obj.register_terminator(uninitialize_example_module);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
return init_obj.init();
}
Однак для Godot 4.1 це має виглядати так:
GDExtensionBool GDE_EXPORT example_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
init_obj.register_initializer(initialize_example_module);
init_obj.register_terminator(uninitialize_example_module);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
return init_obj.init();
}
Є дві невеликі зміни:
Перший аргумент змінюється з
const GDExtensionInterface *p_interfaceнаGDExtensionInterfaceGetProcAddress p_get_proc_addressКонструктор для змінної init_obj тепер отримує
p_get_proc_addressяк перший параметр
Також потрібно додати додатковий рядок compatibility_minimum до вашого файлу .gdextension, щоб він виглядав приблизно так:
[configuration]
entry_symbol = "example_library_init"
compatibility_minimum = 4.1
Це дає Godot знати, що ваше GDExtension оновлено та безпечно завантажувати у Godot 4.1.