Обновление с 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 |
||||
У метода |
✔️ |
✔️ |
✔️ |
|
Object |
||||
Метод |
✔️ |
❌ |
❌ |
|
Transform3D |
||||
У метода |
✔️ |
✔️ |
✔️ |
|
UndoRedo |
||||
Метод |
✔️ |
✔️ |
✔️ |
|
WorkerThreadPool |
||||
Метод |
✔️ |
❌ |
✔️ |
Анимация
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
AnimationNode |
||||
Метод |
❌ |
❌ |
❌ |
|
У метода |
✔️ |
✔️ |
✔️ |
|
У метода |
✔️ |
✔️ |
✔️ |
|
AnimationNodeStateMachinePlayback |
||||
В методе |
✔️ |
❌ |
❌ |
2D узлы
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
PathFollow2D |
||||
Свойство |
❌ |
❌ |
❌ |
3D узлы
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
Geometry3D |
||||
В методе |
✔️ |
✔️ |
❌ |
|
MeshInstance3D |
||||
В метод |
✔️ |
✔️ |
✔️ |
|
Node3D |
||||
В метод |
✔️ |
✔️ |
✔️ |
|
В метод |
✔️ |
✔️ |
✔️ |
GUI узлы
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
CodeEdit |
||||
В метод |
✔️ |
✔️ |
✔️ |
|
RichTextLabel |
||||
В метод |
✔️ |
✔️ |
✔️ |
|
В метод |
✔️ |
✔️ |
✔️ |
|
В метод |
✔️ |
✔️ |
✔️ |
|
Tree |
||||
В метод |
✔️ |
✔️ |
✔️ |
Физика
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
Area2D |
||||
Тип свойства |
❌ |
❌ |
❌ |
|
Area3D |
||||
Тип свойства |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState2D |
||||
Метод |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState3D |
||||
Метод |
❌ |
❌ |
❌ |
Отрисовка
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
RDShaderFile |
||||
Метод |
✔️ |
❌ |
❌ |
|
RenderingDevice |
||||
Метод |
✔️ |
✔️ |
❌ |
|
RenderingServer |
||||
Метод |
✔️ |
❌ |
❌ |
|
SurfaceTool |
||||
Метод |
✔️ |
✔️ |
❌ |
Сетевое взаимодействие
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
WebRTCPeerConnectionExtension |
||||
У метода |
✔️ |
❌ |
✔️ |
Плагины редактора
Изменение |
Совместимо с GDScript |
Совместимо с бинарным кодом C# |
Совместимо с исходным кодом C# |
Введено в |
|---|---|---|---|---|
AnimationTrackEditPlugin |
||||
Тип |
❌ |
❌ |
❌ |
|
EditorInterface |
||||
Тип |
✔️ |
❌ |
❌ |
|
Метод |
✔️ |
❌ |
❌ |
|
Метод |
✔️ |
❌ |
❌ |
|
EditorResourcePreviewGenerator |
||||
У метода |
❌ |
❌ |
❌ |
|
У метода |
❌ |
❌ |
❌ |
|
EditorUndoRedoManager |
||||
Метод |
✔️ |
✔️ |
✔️ |
Изменения в поведении
В 4.1 введены некоторые изменения поведения, которые могут потребовать от вас подготовить проект.
Изменение |
Введено в |
|---|---|
SubViewportContainer |
|
Когда события ввода должны достигнуть SubViewports и их потомков, |
|
Узлы |
|
Viewport |
|
|
Обновление ваших 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();
}
Есть два небольших изменения:
Первый аргумент сменен с
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.