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 3 до Godot 4

Чи варто оновлюватись до Godot 4?

Перш ніж почати процес оновлення, варто подумати про переваги та недоліки, які оновлення принесе вашому проекту.

Переваги оновлення

Разом із новими функціями, наявними в 4.0, оновлення дає наступні переваги:

  • Багато помилок виправлено у версії 4.0, але їх неможливо усунути в версії 3.x з різних причин (наприклад, відмінності графічного API або зворотна сумісність).

  • Версія 4.x матиме довший support period. Godot 3.x продовжуватиме підтримуватися ще деякий час після виходу версії 4.0, але зрештою її підтримка припиниться.

Дивіться Журнал змін документації для переліку сторінок, на яких документовано нові функції в Godot 4.0, і Список особливостей для переліку всіх функцій у Godot.

Недоліки модернізації

Якщо вам не потрібні жодні функції, присутні в Godot 4.x, ви можете залишитися на Godot 3.x з наступних причин:

  • Базові вимоги до апаратного забезпечення Godot 4 (наприклад, використання пам’яті) дещо вищі як для редактора, так і для експортованих проектів. Це було потрібно для впровадження деяких основних оптимізацій.

  • Оскільки Godot 4 містить більше функцій, ніж Godot 3, двійковий розмір Godot 4 для експортованих проектів більший. Хоча це можна пом’якшити optimizing a build for size, збірка 4.0 із заданим набором увімкнених модулів залишатиметься більшою порівняно з збіркою 3.x із тими самими модулями. Це може бути проблемою для exporting to the Web, оскільки двійковий розмір безпосередньо впливає на швидкість ініціалізації механізму (незалежно від швидкості завантаження).

  • Godot 4 не підтримує і не матиме підтримки візуалізації GLES2. (Досі підтримується рендеринг GLES3 за допомогою нового рендерера сумісності, що означає, що пристрої без підтримки Vulkan все ще можуть працювати з Godot 4.)

    • Якщо ви націлюєтеся на дуже старе обладнання, наприклад інтегровану відеокарту Intel Sandy Bridge (2-го покоління), це не дозволить запустити проект на такому обладнанні після оновлення. Програмні реалізації OpenGL можна використовувати для обходу цього обмеження, але вони надто повільні для ігор.

Застереження щодо модернізації

Оскільки Godot 4 є повністю переписаним у багатьох аспектах, деякі функції, на жаль, було втрачено в процесі. Деякі з цих функцій можуть бути відновлені в майбутніх випусках Godot:

  • Фізику куль було видалено на користь GodotPhysics. Це стосується лише 3D-проектів, які використовували фізичний движок за замовчуванням (яким був Bullet) і не змінювали його вручну на GodotPhysics. Немає планів повторно додавати фізику Bullet в ядро, але стороннє доповнення можна створити для нього завдяки GDExtension.

  • За замовчуванням рендеринг у 2D більше не виконується в HDR, що означає, що «надто яскраві» модульовані значення не мають видимого ефекту. Починаючи з Godot 4.2, ви можете ввімкнути налаштування проекту HDR 2D для виконання 2D-рендерінгу в HDR. Дивіться також Використання світіння в 2D.

  • Хоча візуалізація все ще відбувається в HDR у 3D під час використання Forward+ або Mobile рендерів, Viewports більше не можуть повертати дані HDR. Це планується відновити в якийсь момент у майбутньому.

  • Mono було замінено на .NET 6. Це означає, що експорт проектів C# до Android, iOS і HTML5 більше не підтримується. Експорт проектів C# на настільні платформи все ще підтримується, а з версії 4.2 існує експериментальна підтримка експорту на мобільні платформи. Підтримку експорту проектів C# на більше платформ буде відновлено в майбутніх випусках 4.x у міру покращення підтримки початкової версії.

Ви можете знайти більш повний список функціональних регресій, виконавши пошук проблем з позначкою «регресія», але не «помилка» на GitHub.

Підготовка перед оновленням (необов’язково)

Якщо ви хочете бути готовими до оновлення до Godot 4 у майбутньому, подумайте про використання class_Tweener і class_Time синглтона у вашому проекті. Ці класи доступні в Godot 3.5 і новіших версіях.

Таким чином, ви не будете покладатися на застарілі функції вузла Tween і часу ОС, обидві з яких видалено в Godot 4.0.

Також доцільно перейменувати зовнішні шейдери так, щоб їхнє розширення було .gdshader замість .shader. Godot 3.x підтримує обидва розширення, але в Godot 4.0 підтримується лише .gdshader.

Запуск інструменту оновлення проекту

Небезпека

Зробіть повну резервну копію свого проекту перед оновленням! Інструмент оновлення проекту не створюватиме резервні копії проекту, який оновлюється.

Ви можете створити резервну копію проекту за допомогою керування версіями або скопіювавши папку проекту в інше розташування.

Використання менеджера проекту

Використовувати інструмент оновлення проекту:

  1. Відкрийте Менеджер проектів Godot 4.

  2. Імпортуйте проект Godot 3.x за допомогою кнопки Імпортувати або використовуйте кнопку Сканувати, щоб знайти проект у папці.

  3. Двічі клацніть імпортований проект (або виберіть проект і виберіть Редагувати).

  4. Ви побачите діалогове вікно з двома параметрами: Перетворити тільки project.godot і Перетворити весь проект. Переконавшись, що для вашого проекту створено резервну копію (див. попередження вище), виберіть Перетворити повний проект. Convert project.godot Only призначено для використання лише для розширених випадків використання, якщо інструмент перетворення не працює.

  5. Дочекайтеся завершення процесу перетворення проекту. Для великих проектів із великою кількістю сцен це може зайняти до кількох хвилин.

  6. Коли інтерфейс менеджера проектів знову стане доступним, двічі клацніть проект (або виберіть проект і виберіть Редагувати), щоб відкрити його в редакторі.

Якщо у вас виникають проблеми з перетворенням через те, що деякі файли проекту занадто великі або довгі, ви можете скористатися командним рядком для оновлення проекту (див. нижче). Це дозволить вам перевизначити обмеження розміру конвертера.

Використання командного рядка

Щоб скористатися інструментом оновлення проекту з командного рядка, рекомендується перевірити перетворення проекту, запустивши двійковий файл редактора Godot із такими аргументами:

# [<max_file_kb>] [<max_line_size>] are optional arguments.
# Remove them if you aren't changing their values.
path/to/godot.binary --path /path/to/project/folder --validate-conversion-3to4 [<max_file_kb>] [<max_line_size>]

Якщо вам подобається список запланованих оновлень, виконайте таку команду у двійковому файлі редактора Godot, щоб оновити файли проекту:

# [<max_file_kb>] [<max_line_size>] are optional arguments.
# Remove them if you aren't changing their values.
path/to/godot.binary --path /path/to/project/folder --convert-3to4 [<max_file_kb>] [<max_line_size>]

[<max_file_kb>] і [<max_line_size>] є необов’язковими аргументами для визначення максимального розміру файлів, які потрібно конвертувати (у кілобайтах і рядках). Обмеження за умовчанням становлять 4 МБ і 100 000 рядків відповідно. Якщо файл досягає будь-якого з цих обмежень, він не буде оновлено конвертером проекту. Це корисно, щоб запобігти сповільненню оновлення великих ресурсів до сканування.

Якщо ви все ще хочете, щоб інструмент оновлення проекту перетворював великі файли, збільште обмеження на розмір під час запуску інструменту оновлення проекту. Наприклад, запуск двійкового файла редактора Godot з цими аргументами збільшує обидва обмеження у 10 разів:

path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000

Примітка

Лише проекти Godot 3.0 і новіших версій можна оновити за допомогою інструменту перетворення проектів у редакторі Godot 4.

Рекомендується переконатися, що ваш проект оновлено до останньої стабільної версії 3.x, перш ніж запускати інструмент оновлення проекту.

Виправлення проекту після запуску інструменту оновлення проекту

Після оновлення проекту ви можете помітити, що деякі речі виглядають не так, як повинні. Сценарії, ймовірно, також будуть містити різні помилки (можливо, сотні у великих проектах). Це тому, що інструмент оновлення проекту не може задовольнити всі ситуації. Тому велика частина процесу оновлення залишається вручну.

Автоматичне перейменування вузлів і ресурсів

Список нижче стосується вузлів, які були просто перейменовані для узгодженості та ясності в Godot 4.0. Інструмент оновлення проекту автоматично перейменовує їх у ваших сценаріях.

Вартий уваги набір перейменувань — це 3D-вузли, до яких додано суфікс 3D для узгодженості з їх двовимірними аналогами. Наприклад, Area тепер Area3D.

Для зручності пошуку в цій таблиці перераховано всі вузли та ресурси, які було перейменовано та автоматично перетворено, за винятком тих, які передбачали лише додавання суфікса 3D до старої назви:

Стара назва (Godot 3.x)

Нова назва (Godot 4)

AnimatedSprite

AnimatedSprite2D

ARVRCamera

XRCamera3D

ARVRController

XRController3D

ARVRAnchor

XRAnchor3D

ARVRInterface

XRInterface

ARVROrigin

XROrigin3D

ARVRPositionalTracker

XRPositionalTracker

ARVRServer

XRServer

BoxShape

BoxShape3D

CapsuleShape

CapsuleShape3D

CubeMesh

BoxMesh

EditorSpatialGizmo

EditorNode3DGizmo

EditorSpatialGizmoPlugin

EditorNode3DGizmoPlugin

GIProbe

VoxelGI

GIProbeData

VoxelGIData

GradientTexture

GradientTexture1D

KinematicBody

CharacterBody3D

KinematicBody2D

CharacterBody2D

Light2D

PointLight2D

LineShape2D

WorldBoundaryShape2D

Listener

AudioListener3D

NavigationMeshInstance

NavigationRegion3D

NavigationPolygonInstance

NavigationRegion2D

Navigation2DServer

NavigationServer2D

PanoramaSky

Sky

Particles

GPUParticles3D

Particles2D

GPUParticles2D

ParticlesMaterial

ParticleProcessMaterial

Physics2DDirectBodyState

PhysicsDirectBodyState2D

Physics2DDirectSpaceState

PhysicsDirectSpaceState2D

Physics2DServer

PhysicsServer2D

Physics2DShapeQueryParameters

PhysicsShapeQueryParameters2D

Physics2DTestMotionResult

PhysicsTestMotionResult2D

PlaneShape

WorldBoundaryShape3D

Position2D

Marker2D

Position3D

Marker3D

ProceduralSky

Sky

RayShape

SeparationRayShape3D

RayShape2D

SeparationRayShape2D

ShortCut

Shortcut

Spatial

Node3D

SpatialGizmo

Node3DGizmo

SpatialMaterial

StandardMaterial3D

Sprite

Sprite2D

StreamTexture

CompressedTexture2D

TextureProgress

TextureProgressBar

VideoPlayer

VideoStreamPlayer

ViewportContainer

SubViewportContainer

Viewport

SubViewport

VisibilityEnabler

VisibleOnScreenEnabler3D

VisibilityNotifier

VisibleOnScreenNotifier3D

VisibilityNotifier2D

VisibleOnScreenNotifier2D

VisibilityNotifier3D

VisibleOnScreenNotifier3D

VisualServer

RenderingServer

VisualShaderNodeScalarConstant

VisualShaderNodeFloatConstant

VisualShaderNodeScalarFunc

VisualShaderNodeFloatFunc

VisualShaderNodeScalarOp

VisualShaderNodeFloatOp

VisualShaderNodeScalarClamp

VisualShaderNodeClamp

VisualShaderNodeVectorClamp

VisualShaderNodeClamp

VisualShaderNodeScalarInterp

VisualShaderNodeMix

VisualShaderNodeVectorInterp

VisualShaderNodeMix

VisualShaderNodeVectorScalarMix

VisualShaderNodeMix

VisualShaderNodeScalarSmoothStep

VisualShaderNodeSmoothStep

VisualShaderNodeVectorSmoothStep

VisualShaderNodeSmoothStep

VisualShaderNodeVectorScalarSmoothStep

VisualShaderNodeSmoothStep

VisualShaderNodeVectorScalarStep

VisualShaderNodeStep

VisualShaderNodeScalarSwitch

VisualShaderNodeSwitch

VisualShaderNodeScalarTransformMult

VisualShaderNodeTransformOp

VisualShaderNodeScalarDerivativeFunc

VisualShaderNodeDerivativeFunc

VisualShaderNodeVectorDerivativeFunc

VisualShaderNodeDerivativeFunc

VisualShaderNodeBooleanUniform

VisualShaderNodeBooleanParameter

VisualShaderNodeColorUniform

VisualShaderNodeColorParameter

VisualShaderNodeScalarUniform

VisualShaderNodeFloatParameter

VisualShaderNodeCubeMapUniform

VisualShaderNodeCubeMapParameter

VisualShaderNodeTextureUniform

VisualShaderNodeTexture2DParameter

VisualShaderNodeTextureUniformTriplanar

VisualShaderNodeTextureParameterTriplanar

VisualShaderNodeTransformUniform

VisualShaderNodeTransformParameter

VisualShaderNodeVec3Uniform

VisualShaderNodeVec3Parameter

VisualShaderNodeUniform

VisualShaderNodeParameter

VisualShaderNodeUniformRef

VisualShaderNodeParameterRef

Перейменування методів, властивостей, сигналів та констант вручну

Через те, як працює інструмент оновлення проекту, не всі перейменування API можна виконати автоматично. Список нижче містить усі перейменування, які потрібно виконати вручну за допомогою редактора сценаріїв.

Якщо ви не можете знайти вузол або ресурс у списку нижче, зверніться до таблиці вище, щоб знайти його нову назву.

Порада

Ви можете скористатися діалоговим вікном Замінити у файлах, щоб пришвидшити заміну, натиснувши Ctrl + Shift + R, коли відкрито редактор сценаріїв. Однак будьте обережні, оскільки діалогове вікно «Замінити у файлах» не пропонує жодного способу скасувати заміну. Використовуйте контроль версій, щоб регулярно виконувати роботу з оновлення. Інструменти командного рядка, такі як sd, також можна використовувати, якщо вам потрібно щось гнучкіше, ніж діалогове вікно редактора «Замінити у файлах».

Якщо ви використовуєте C#, не забувайте шукати застаріле використання API з нотацією PascalCase у проекті (і виконати заміну на нотацію PascalCase).

Методи

  • Класи File та Directory були замінені на FileAccess і DirAccess, які мають зовсім інший API. Кілька методів тепер статичні, що означає, що ви можете викликати їх безпосередньо у FileAccess або DirAccess без необхідності створювати екземпляр цього класу.

  • Методи, пов’язані з екраном і вікном, із синглтона class_OS (такі як OS.get_screen_size()) були переміщені до сінглона DisplayServer. Іменування методів також було змінено для використання форми DisplayServer.<object>_<get/set>_property(). Наприклад, OS.get_screen_size() стає DisplayServer.screen_get_size().

  • Методи часу та дати з синглтона class_OS було переміщено до сінглона class_Time. (Синглтон часу також доступний у Godot 3.5 і пізніших версіях.)

  • Можливо, вам доведеться замінити деякі виклики instance() на instantiate(). Конвертер має обробляти це автоматично, але це залежить від спеціального коду, який може не працювати в 100% ситуацій.

  • set_autowrap() AcceptDialog тепер set_autowrap_mode().

  • process() AnimationNode тепер _process() (зверніть увагу на початок підкреслення, яке позначає віртуальний метод).

  • add_animation() AnimationPlayer тепер add_animation_library() і тепер використовує AnimationLibrary.

  • set_process_mode() AnimationTree тепер set_process_callback().

  • empty() масиву тепер is_empty().

  • invert() масиву тепер reverse().

  • remove() масиву тепер remove_at().

  • get_points() AStar2D і AStar3D тепер get_points_id().

  • set_event() BaseButton тепер set_shortcut().

  • get_h_offset() Camera2D тепер get_drag_horizontal_offset().

  • get_v_offset() Camera2D тепер get_drag_vertical_offset().

  • set_h_offset() Camera2D тепер set_drag_horizontal_offset().

  • set_v_offset() Camera2D тепер set_drag_vertical_offset().

  • raise() CanvasItem тепер move_to_front().

  • update() CanvasItem тепер queue_redraw().

  • get_stylebox() елемента керування тепер get_theme_stylebox().

  • set_tooltip() елемента керування тепер set_tooltip_text().

  • create_gizmo() EditorNode3DGizmoPlugin тепер _create_gizmo() (зверніть увагу на початок підкреслення, яке позначає віртуальний метод).

  • get_peer_port() ENetMultiplayerPeer тепер get_peer().

  • get_mode() FileDialog тепер get_file_mode().

  • set_mode() FileDialog тепер set_file_mode().

  • get_offset() GraphNode тепер get_position_offset().

  • map_to_world() GridMap тепер map_to_local().

  • world_to_map() GridMap тепер local_to_map().

  • get_rect() зображення тепер get_region().

  • set_normal() ImmediateGeometry тепер surface_set_normal().

  • set_color() ImmediateMesh тепер surface_set_color().

  • set_uv() ImmediateMesh тепер surface_set_uv().

  • get_v_scroll() ItemList тепер get_v_scroll_bar().

  • get_network_connected_peers() MultiPlayerAPI тепер get_peers().

  • get_network_peer() MultiPlayerAPI тепер get_peer().

  • get_network_unique_id() MultiPlayerAPI тепер get_unique_id().

  • has_network_peer() MultiPlayerAPI тепер has_multiplayer_peer().

  • MultiplayerAPI is_refusing_new_network_connections() тепер is_refusing_new_connections().

  • is_listening() PacketPeerUDP тепер is_bound().

  • listen() PacketPeerUDP тепер bind().

  • set_flag() у ParticleProcessMaterial тепер set_particle_flag().

  • get_motion() PhysicsTestMotionResult2D тепер get_travel().

  • get_render_info() RenderingServer тепер get_rendering_info().

  • get_dependencies() ResourceFormatLoader тепер _get_dependencies() (зверніть увагу на початок підкреслення, яке позначає віртуальний метод).

  • load() ResourceFormatLoader тепер _load().

  • change_scene() SceneTree тепер change_scene_to_file().

  • Ярлик is_valid() тепер has_valid_event().

  • map_to_world() TileMap тепер map_to_local().

  • world_to_map() TileMap тепер local_to_map().

  • xform() Transform2D має значення mat * vec, а xform_inv() є vec * mat.

  • get_name() XRPositionalTracker тепер get_tracker_name().

  • get_type() XRPositionalTracker тепер get_tracker_type().

  • _set_name() XRPositionalTracker тепер get_tracker_name().

Властивості

Примітка

Якщо тут зазначено властивість, пов’язані з нею методи отримання та встановлення також потрібно перейменувати вручну, якщо вони використовуються в проекті. Наприклад, set_offset() і get_offset() PathFollow2D і PathFollow3D повинні бути перейменовані на set_progress() і get_progress() відповідно.

  • Пристрій AudioServer тепер output_device.

  • група BaseButton тепер button_group.

  • zfar Camera3D тепер far.

  • znear Camera3D тепер near

  • Поле елемента керування тепер зсув.

  • doubleclick InputEventMouseButton тепер double_click.

  • alt InputEventWithModifiers тепер alt_pressed.

  • Команда InputEventWithModifiers тепер command_pressed.

  • InputEventWithModifiers's control зараз ctrl_pressed.

  • meta InputEventWithModifiers тепер meta_pressed.

  • Shift InputEventWithModifiers тепер shift_pressed.

  • percent_visible мітки тепер visible_ratio.

  • refuse_new_network_connections MultiPlayerAPI тепер refuse_new_connections.

  • Назва файлу вузла тепер scene_file_path.

  • обертання PathFollow2D тепер обертається.

  • Зсув PathFollow2D і PathFollow3D тепер прогрес.

  • Extents RectangleShape2D тепер size

  • percent_visible TextureProgressBar тепер show_percentage.

  • Тема вимкнена тепер знята.

  • ofs теми тепер offset.

  • Тема увімкнена тепер перевірена.

  • window_title вікна тепер title.

  • d у WorldMarginShape2D тепер є відстань.

  • Властивість extents на вузлах CSG і VoxelGI потрібно буде замінити на size, при цьому задане значення буде зменшено вдвічі (оскільки вони більше не є напівекстентами). Це також впливає на його методи установки/отримання set_extents() і get_extents().

  • Властивість Engine.editor_hint було видалено на користь Engine.is_editor_hint() методу. Це тому, що він доступний лише для читання, а властивості в Godot не використовуються для значень лише для читання.

Юним

  • FLAG_MAX CPUParticles2D тепер PARTICLE_FLAG_MAX.

Сигнали

  • Екземпляр FileSystemDock тепер є примірником.

  • Hide CanvasItem тепер схований. Це перейменування не стосується методу hide(), а лише сигналу.

  • Tween tween_all_completed тепер loop_finished.

  • EditorSettings changed тепер settings_changed.

Константи

  • Назви кольорів тепер пишуться великими літерами, а між словами використовуються підкреслення. Наприклад, Color.palegreen тепер Color.PALE_GREEN.

  • Константи MainLoop NOTIFICATION_ були продубльовані до Node, що означає, що ви можете видалити префікс MainLoop. під час посилання на них.

  • NOTIFICATION_WM_QUIT_REQUEST MainLoop тепер NOTIFICATION_WM_CLOSE_REQUEST.

Перевірка налаштувань проекту

Кілька налаштувань проекту було перейменовано, а переліки деяких із них змінено несумісними способами (наприклад, якість тіньового фільтра). Це означає, що вам може знадобитися знову встановити деякі параметри проекту. Переконайтеся, що перемикач Додатково увімкнено в діалоговому вікні налаштувань проекту, щоб ви могли бачити всі налаштування проекту.

Перевірка параметрів середовища

Параметри якості графіки перенесено з властивостей середовища до параметрів проекту. Це було зроблено, щоб полегшити коригування якості виконання без необхідності доступу до поточного активного ресурсу середовища та зміни його властивостей.

У результаті вам доведеться налаштувати параметри якості середовища в параметрах проекту, оскільки старі параметри якості середовища не перетворюються автоматично на параметри проекту.

Якщо у вас є меню налаштувань графіки, яке змінило властивості середовища в Godot 3.x, вам доведеться змінити його код для виклику методів class_RenderingServer, які впливають на якість ефектів середовища. Лише «базовий» перемикач кожного ефекту середовища та його візуальні ручки залишаються в межах ресурсу середовища.

Оновлення шейдерів

У шейдери внесено деякі зміни, які не охоплюються інструментом оновлення. Вам потрібно буде внести деякі зміни вручну, особливо якщо ваш шейдер використовує перетворення простору координат або спеціальну функцію light().

Розширення файлу .shader більше не підтримується, що означає, що ви повинні перейменувати файли .shader на .gdshader і відповідно оновити посилання у файлах сцен/ресурсів за допомогою зовнішнього текстового редактора.

Деякі помітні зміни, які вам потрібно буде виконати в шейдерах:

  • Фільтр текстур і режими повторення тепер встановлюються для окремих форм, а не для самих файлів текстур.

  • hint_albedo тепер source_color.

  • hint_color тепер source_color.

  • Вбудовані змінні матриці перейменовано.

  • Шейдери частинок більше не використовують функцію процесора vertex(). Замість цього вони використовують start() і process().

  • У програмах візуалізації Forward+ і Mobile нормалізовані координати пристрою тепер мають Z-діапазон [0.0,1.0] замість [-1.0,1.0]. Під час реконструкції NDC із SCREEN_UV і глибини використовуйте vec3 ndc = vec3(SCREEN_UV * 2,0 - 1,0, глибина); замість vec3 ndc = vec3(SCREEN_UV, глибина) * 2,0 - 1,0;. Рендерер сумісності не змінився, використовується той самий Z-діапазон NDC, що й 3.x.

  • Змінена модель освітлення. Якщо ваш шейдер має спеціальну функцію light(), вам може знадобитися внести зміни, щоб отримати той самий візуальний результат.

  • У версіях 4.3 і новіших версій тепер реалізовано метод зворотного буфера глибини Z, який може порушити роботу передових шейдерів. Див. Представляємо Reverse Z (також вибачте, що зламав ваш шейдер).

Перегляньте Штрихування мови для отримання додаткової інформації.

Цей список не є вичерпним. Якщо ви внесли всі згадані тут зміни, а ваш шейдер все ще не працює, ` спробуйте попросити допомоги в одному з каналів спільноти <https://godotengine.org/community/>`__.

Оновлення сценаріїв для врахування зворотно-несумісних змін

Деякі зміни, виконані між Godot 3.x і 4, не є перейменуванням, але вони все одно порушують зворотну сумісність через різну поведінку за умовчанням.

Найпомітніші приклади цього:

  • Такі функції життєвого циклу, як _ready() і _process() більше не викликають неявно функції батьківських класів, які мають однакові назви. Замість цього ви повинні використовувати super() у верхній частині функції життєвого циклу в дочірньому класі, щоб функція батьківського класу викликалася першою.

  • І class_String, і class_StringName тепер доступні для GDScript. Це забезпечує більшу оптимізацію, оскільки StringName спеціально розроблено для використання для "константи" рядки, які створюються один раз і повторно використовуються багато разів. Ці типи не є строго еквівалентними один одному, що означає, що is_same("example", &"example") повертає false. Хоча в більшості випадків вони взаємозамінні ("example" == &"example" повертає true), інколи вам може знадобитися замінити "example" на &"example".

  • Синтаксис установщика та отримання GDScript було змінено, але він лише частково перетворено інструментом перетворення. У більшості випадків потрібні ручні зміни, щоб сеттери та геттери знову працювали.

  • GDScript signal connection syntax було змінено. Інструмент перетворення використовуватиме синтаксис на основі рядків, який все ще присутній у Godot 4, але рекомендується перейти на синтаксис на основі class_Signal, описаний на сторінці за посиланням. Таким чином, рядки більше не залучаються, що дозволяє уникнути проблем із помилками імен сигналу, які можна виявити лише під час виконання.

  • Вбудовані сценарії, які є скриптами інструментів, не перетворюють ключове слово tool на анотацію @tool.

  • Вузол Tween було видалено на користь Tweeners, які також доступні в Godot 3.5 і пізніших версіях.Перегляньте оригінальний запит на витягування для деталей.

  • randomize() тепер автоматично викликається під час завантаження проекту, тому детермінована випадковість із глобальним екземпляром RandomNumberGenerate вимагає вручну встановити початкове значення у функції _ready() сценарію.

  • call_group(), set_group() і notify_group() тепер негайні за замовчуванням. Якщо викликати дорогу функцію, це може призвести до заїкань під час використання в групі, що містить велику кількість вузлів. Щоб використовувати відкладені дзвінки, як раніше, замініть call_group(...) на call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...) (і зробіть те саме з set_group() і notify_group) () відповідно).

  • Замість rotation_degrees, властивість rotation доступна для редактора, яка автоматично відображається як градуси в панелі Inspector. Це може порушити анімацію, оскільки конвертація не виконується автоматично інструментом конвертації.

  • AABB's has_no_surface() було перевернуто та перейменовано на has_surface().

  • AABB і class_Rect2 has_no_area() було інвертовано та перейменовано на has_area().

  • Властивість fps AnimatedTexture було замінено на speed_scale, яке працює так само, як і властивість playback_speed AnimationPlayer.

  • AnimatedSprite2D і AnimatedSprite3D тепер допускають негативні значення speed_scale. Це може порушити анімацію, якщо ви покладалися на те, що speed_scale внутрішньо закріплено на 0.0.

  • AnimatedSprite2D і AnimatedSprite3D властивість playing видалено. Замість цього використовуйте метод play()/stop() АБО налаштуйте анімацію autoplay через нижню панель SpriteFrames (але не обидва одночасно).

  • Array's slice() другий параметр (end) тепер є виключним, а не включним. Наприклад, це означає, що [1, 2, 3].slice(0, 1) тепер повертає [1] замість [1, 2].

  • Сигнали BaseButton тепер button_up і button_down. Властивість pressed тепер button_pressed.

  • Властивість rotating Camera2D було замінено на ignore_rotation, яка має інвертовану поведінку.

  • Властивість Camera2D zoom було інвертовано: вищі значення тепер збільшено більше, а не менше.

  • class_Node's remove_and_skip() метод видалено. Якщо вам потрібно повторно реалізувати його в сценарії, ви можете використати «стару реалізацію C++». як посилання.

  • OS.get_system_time_secs() слід перетворити на Time.get_time_dict_from_system()["second"].

  • class_ResourceSaver's save() тепер аргументи методу поміняні місцями (resource: Resource, path: String). Це також стосується методу class_ResourceFormatSaver _save().

  • class_StreamPeerTCP має викликати poll(), щоб оновити його стан, замість того, щоб покладатися на get_status() автоматичного опитування: GH-59582

  • class_String's right() метод змінив поведінку: тепер він повертає кількість символів з правого боку рядка, а не з правого боку рядка з даної позиції. Якщо вам потрібна стара поведінка, ви можете використовувати замість неї substr().

  • is_connected_to_host() було видалено зі StreamPeerTCP і PacketPeerUDP відповідно до GH-59582. Замість цього в StreamPeerTCP можна використовувати get_status(). is_socket_connected() можна використовувати в class_PacketPeerUDP замість цього.

  • У _get_property_list() рядок підказки властивості or_lesser тепер має назву or_less.

  • У _get_property_list() рядок підказки властивості noslider тепер має назву no_slider.

  • VisualShaderNodeVec4Parameter тепер приймає class_Vector4 як параметр замість class_Quaternion.

Видалені або замінені вузли/ресурси

Це список усіх вузлів, які були замінені іншим вузлом, що потребує іншої конфігурації. Налаштування потрібно виконати знову з нуля, оскільки конвертер проекту не підтримує оновлення наявних налаштувань:

Видалений вузол

Найближче наближення

Коментар

AnimationTreePlayer

AnimationTree

Програвач AnimationTreePlayer застарів з Godot 3.1.

BakedLightmap

LightmapGI

Дивіться Використання глобального освітлення Lightmap.

BakedLightmapData

LightmapGIData

BitmapFont

FontFile

Дивіться Використання шрифтів.

Динамічний Шрифт

FontFile

DynamicFontData

FontFile

ClippedCamera

Camera2D або Camera3D

Пірамідну форму камери перенесено до :ref:'class_Camera3D'.

InterpolatedCamera

Camera2D або Camera3D

Navigation2D

Node2D

Замінено на інші вузли двовимірної навігації.

Навігація 3D

Node3D

Замінено на інші вузли тривимірної навігації.

Відкрити Simplex Noise

Швидкий Noise Lite

Має різні параметри та більше типів шуму, наприклад стільниковий. Немає підтримки 4D-шуму, оскільки його немає в бібліотеці FastNoiseLite.

Кнопка "Інструмент"

Кнопка

ToolButton була кнопкою з властивістю Flat, увімкненою за замовчуванням.

Y Сортування

Node2D або Control

CanvasItem має нову властивість Y Sort Enabled у версії 4.0.

Група близькості

Node3D

class_VisibleOnScreenNotifier3D може виступати як заміна.

Портал

Node3D

Відбір блокування порталу та кімнати було замінено растровим відбракуванням блокування (вузол OccluderInstance3D), для якого потрібен інший процес налаштування.

Кімната

Node3D

RoomManager (Керівник кімнати)

Node3D

Група номерів

Node3D

Оклюдер

Node3D

Геометричне відсіювання оклюзії було замінено растровим відбракуванням оклюзії (вузол OccluderInstance3D), для якого потрібен інший процес налаштування.

OccluderShapeSphere (Сферична Форма Оклюдера)

Ресурс

Якщо завантажується старий проект, вузол буде автоматично замінено його Найближчим наближенням (навіть якщо не використовується інструмент оновлення проекту).

Зміни потоків

Threading API змінено у версії 4.0. Наприклад, наступний фрагмент коду в Godot 3.x потрібно змінити, щоб він працював у 4.0:

# 3.x
var start_success = new_thread.start(self, "__threaded_background_loader",
    [resource_path, thread_num]
)

# 4.0
var start_success = new_thread.start(__threaded_background_loader.bind(resource_path, thread_num))

Thread.is_active() більше не використовується і має бути перетворено на Thread.is_alive().

Дивись також

Перегляньте журнал змін, щоб отримати повний список змін між Godot 3.x і 4.

Порушення сумісності ресурсів ArrayMesh

Якщо ви зберегли ресурс ArrayMesh у файлі .res або .tres, формат, який використовується у 4.0, несумісний із форматом, який використовується у 3.x. Вам потрібно буде знову пройти процес імпорту вихідного файлу сітки та зберегти його як ресурс ArrayMesh.

Список автоматично перейменованих методів, властивостей, сигналів і констант

The editor/project_upgrade/renames_map_3_to_4.cpp source file lists all automatic renames performed by the project upgrade tool. Lines that are commented out refer to API renames that cannot be performed automatically.

Налаштування редактора портування

Godot 3.x і 4.0 використовують різні файли налаштувань редактора. Це означає, що їхні налаштування можна змінювати незалежно один від одного.

Якщо ви бажаєте перенести налаштування Godot 3.x на Godot 4, відкрийте теку налаштувань редактора і скопіюйте editor_settings-3.tres до editor_settings-4.tres поки редактор Godot 4 закритий.

Примітка

Багато назв і категорій налаштувань змінилися з Godot 3.x. Налаштування редактора, назва чи категорія якого змінено, не переносяться до Godot 4.0; вам доведеться знову встановити їх значення.

Оновлення налаштувань контролю версій

Godot 3.x та 4.x мають зовсім різні списки файлів і папок, які ваш... version control system.