Обновление с Godot 4.0 на Godot 4.1

Для большинства игр и приложений сделанных на Godot 4.0, переход на 4.1 будет относительно безопасным. Эта страница нужна, для того, чтобы показать, на что обратить внимание при переходе вашего проекта.

Изменения ломающие обратную совместимость

Если вы переходите с версии 4.0 на 4.1, то эти изменения, ломающие обратную совместимость, перечисленные здесь, могут повлиять на вас. Изменения сгруппированы по зонам/системам.

Предупреждение

GDExtension API полностью ломает совместимость с 4.1, так что оно не включено в таблицу, расположенную ниже. Смотрите секцию Обновление ваших GDExtension на 4.1 для более подробной информации.

Эта статья показывает, где каждое изменение обратной совместимости влияет на GDScript и где изменение обратной совместимости C# бинарно совместимо или совместимо на уровне кода:

  • Binary compatible (Совместимость на уровне двоичных файлов) — существующие двоичные файлы будут успешно загружены и выполнены без перекомпиляции, а поведение среды выполнения не изменится.

  • Совместимо на уровне кода - Исходный код будет успешно компилироваться без изменений при обновлении Godot.

Ядро

Изменение

Совместимо с GDScript

Совместимо с бинарным кодом C#

Совместимо с исходным кодом C#

Введено в

Basis

У метода looking_at добавлен новый опциональный параметр use_model_front

✔️

✔️

✔️

GH-76082

Object

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

✔️

GH-76418

Transform3D

У метода looking_at добавлен новый опциональный параметр use_model_front

✔️

✔️

✔️

GH-76082

UndoRedo

Метод 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#

Введено в

PathFollow2D

Свойство lookahead удалено

GH-72842

3D узлы

Изменение

Совместимо с GDScript

Совместимо с бинарным кодом C#

Совместимо с исходным кодом C#

Введено в

Geometry3D

В методе segment_intersects_convex тип параметра planes сменен с бестипового Array на Array[Plane]

✔️

✔️

GH-76418

MeshInstance3D

В метод create_multiple_convex_collisions добавлен новый необязательный параметр settings

✔️

✔️

✔️

GH-72152

Node3D

В метод look_at добавлен новый необязательный параметр use_model_front

✔️

✔️

✔️

GH-76082

В метод look_at_from_position добавлен новый необязательный параметр use_model_front

✔️

✔️

✔️

GH-76082

GUI узлы

Изменение

Совместимо с GDScript

Совместимо с бинарным кодом C#

Совместимо с исходным кодом C#

Введено в

CodeEdit

В метод 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

Tree

В метод 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#

Введено в

AnimationTrackEditPlugin

Тип AnimationTrackEditPlugin удален

GH-76413

EditorInterface

Тип 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

Viewport узлы, у которых включено Выборка Физических Объектов, теперь автоматически устанавливают InputEvents как перехваченные. Смотрите GH-79897 для обходного пути.

GH-77595

Обновление ваших GDExtension на 4.1

GDExtension все еще в состоянии беты. До того как оно станет стабильным, совместимость может нарушаться при обновлении на новую минорную версию Godot.

Чтобы исправить серьезный баг, в Godot 4.1 мы должны сломать очень сильно бинарную совместимость и не очень сильно совместимость исходного кода.

Это означает, что GDExtension, сделанный для 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.