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.

Оновлення з 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#

Введено

Основа

Метод looking_at додає новий необов’язковий параметр use_model_front

✔️

✔️

✔️

GH-76082

Об'єкт

Метод get_meta_list змінює тип повернення з PackedStringArray на Array[StringName]

✔️

GH-76418

Transform3D

Метод looking_at додає новий необов’язковий параметр use_model_front

✔️

✔️

✔️

GH-76082

Відмінити Повторити

Метод create_action додає новий необов’язковий параметр backward_undo_ops

✔️

✔️

✔️

GH-76688

WorkerThreadPool

Метод wait_for_task_completion змінює тип повернення з void на Error

✔️

✔️

GH-77143

Анімація

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

AnimationNode

Метод _process додає новий параметр test_only

GH-75759

Метод blend_input додає новий необов'язковий параметр test_only

✔️

✔️

✔️

GH-75759

Метод blend_node додає новий необов'язковий параметр test_only

✔️

✔️

✔️

GH-75759

AnimationNodeStateMachinePlayback

Метод get_travel_path змінює тип повернення з PackedStringArray на Array[StringName]

✔️

GH-76418

2D вузли

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

Дотримуйтеся шляху 2D

Властивість lookahead видалено

GH-72842

3D вузли

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

Geometry3D

Метод segment_intersects_convex змінює тип параметра planes з нетипового Array на Array[Plane]

✔️

✔️

GH-76418

MeshInstance3D

Метод create_multiple_convex_collision додає новий необов’язковий параметр settings

✔️

✔️

✔️

GH-72152

Node3D

Метод look_at додає новий необов'язковий параметр use_model_front

✔️

✔️

✔️

GH-76082

Метод look_at_from_position додає новий необов’язковий параметр use_model_front

✔️

✔️

✔️

GH-76082

Вузли GUI

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

Редагування коду

Метод add_code_completion_option додає новий необов'язковий параметр location

✔️

✔️

✔️

GH-75746

RichTextLabel

Метод push_list додає новий необов’язковий параметр bullet

✔️

✔️

✔️

GH-75017

Метод push_paragraph додає новий необов'язковий параметр justification_flags

✔️

✔️

✔️

GH-75250

Метод push_paragraph додає новий необов’язковий параметр tab_stops

✔️

✔️

✔️

GH-76401

Дерево

Метод edit_selected додає новий необов’язковий параметр force_edit

✔️

✔️

✔️

GH-76794

Фізика

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

Area2D

Властивість priority змінює тип з float на int

GH-72749

Area3D

Властивість priority змінює тип з float на int

GH-72749

PhysicsDirectSpaceState2D

Метод collide_shape змінює тип повернення з Array[PackedVector2Array] на Array[Vector2

GH-75260

PhysicsDirectSpaceState3D

Метод collide_shape змінює тип повернення з Array[PackedVector3Array] на Array[Vector3]

GH-75260

Рендеринг

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

RDShaderFile

Метод get_version_list змінює тип повернення з PackedStringArray на Array[StringName]

✔️

GH-76418

RenderingDevice

Метод draw_list_begin змінює тип параметра storage_textures з нетипового Array на Array[RID]

✔️

✔️

GH-76418

RenderingServer

Метод global_shader_parameter_get_list змінює тип повернення з PackedStringArray на Array[StringName]

✔️

GH-76418

Інструмент SurfaceTool

Метод add_triangle_fan змінює тип параметра tangents з нетипового Array на Array[Plane]

✔️

✔️

GH-76418

Робота у мережі

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

WebRTCPeerConnectionExtension

Метод _create_data_channel змінює тип повернення з Object на WebRTCDataChannel

✔️

✔️

GH-78237

Додатки редактора

Зміна

Сумісність з GDScript

C# двійковий сумісний

Сумісність із вихідним кодом C#

Введено

Плагін AnimationTrackEdit

Тип AnimationTrackEditPlugin видалено

GH-76413

Інтерфейс редактора

Тип EditorInterface змінює успадкування з Node на Object

✔️

GH-76176

Метод set_movie_maker_enabled замінено властивістю movie_maker_enabled

✔️

GH-76176

Метод is_movie_maker_enabled замінено властивістю movie_maker_enabled

✔️

GH-76176

EditorResourcePreviewGenerator

Метод _generate додає новий параметр metadata

GH-64628

Метод _generate_from_path додає новий параметр metadata

GH-64628

EditorUndoRedoManager

Метод create_action додає новий необов’язковий параметр backward_undo_ops

✔️

✔️

✔️

GH-76688

Зміни поведінки

У версії 4.1 було введено деякі зміни в поведінці, які можуть вимагати від вас коригування вашого проєкту.

Зміна

Введено

SubViewportContainer

Коли події введення мають досягати SubViewports та їхніх дітей, SubViewportContainer.mouse_filter тепер має бути MOUSE_FILTER_STOP або MOUSE_FILTER_PASS. Докладніше див. GH-79271.

GH-57894

Багатошарові вузли SubViewportContainer, які мають отримувати події введення миші, тепер потрібно замінити вузлами Area2D. Докладніше див. GH-79128.

GH-57894

Вікно перегляду

Вузли Viewport, для яких увімкнено Physics Picking, тепер автоматично встановлюють InputEvents як оброблені. Перегляньте GH-79897 для обхідних шляхів.

GH-77595

Оновлення 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();
}

Є дві невеликі зміни:

  1. Перший аргумент змінюється з const GDExtensionInterface *p_interface на GDExtensionInterfaceGetProcAddress p_get_proc_address

  2. Конструктор для змінної init_obj тепер отримує p_get_proc_address як перший параметр

Також потрібно додати додатковий рядок compatibility_minimum до вашого файлу .gdextension, щоб він виглядав приблизно так:

[configuration]

entry_symbol = "example_library_init"
compatibility_minimum = 4.1

Це дає Godot знати, що ваше GDExtension оновлено та безпечно завантажувати у Godot 4.1.