Переход с Godot 3 на Godot 4
Стоит ли мне переходить на Godot 4?
Перед переходом, стоит подумать о преимуществах и недостатках, которые обновление принесет вашему проекту.
Преимущества обновления
Наряду с новыми функциями, представленными в версии 4.0, обновление дает следующие преимущества:
Многие ошибки исправлены в версии 4.0, и они не могут быть устранены в версии 3.x по разным причинам (например, из-за различий в графических API ).
4.x будет иметь более длительный период поддержки . Godot 3.x будет продолжать поддерживаться в течение некоторого времени после выпуска 4.0, но в конечном итоге поддержка прекратится.
Список страниц, документирующих новые функции Godot 4.0, см. в История изменения документации, а список всех функций Godot — в Список функций.
Недостатки обновления
Если вам не нужны какие-либо функции Godot 4.х, вы можете остаться на Godot 3.x по следующим причинам:
Базовые требования к оборудованию Godot 4 (например, к использованию памяти) немного выше как для редактора, так и для экспортированных проектов. Это было необходимо для реализации некоторых основных оптимизаций.
Поскольку в Godot 4 больше функций, чем Godot 3, размер двоичного файла у проектов Godot 4 больше. Хотя его можно уменьшить, оптимизировав сборку по размеру , сборка 4.0 с заданным набором включенных модулей останется больше по сравнению со сборкой 3.x с теми же модулями. Это может быть проблемой при экспорте в Web , поскольку размер двоичного файла напрямую влияет на скорость загрузки движка (независимо от скорости интернета).
Godot 4 не поддерживает и не будет поддерживать рендеринг GLES2. (Все еще поддерживается рендеринг GLES3 с использованием нового рендерера Compatibility, что означает, что устройства без поддержки Vulkan по-прежнему могут запускать Godot 4.)
Если вы ориентируетесь на очень старое оборудование, например со встроенной графикой Intel Sandy Bridge (2-го поколения), это не позволит запустить проект на таком оборудовании после обновления. Можно использовать Программные реализации OpenGL для обхода этого ограничения, но они слишком медленны для игр.
Предостережения при обновлении
Поскольку Godot 4 во многих аспектах полностью переписан, некоторые функции, к сожалению, были удалены. Некоторые из этих функций могут быть восстановлены в будущих версиях Godot:
Физика Bullet была удалена в пользу GodotPhysics. Это касается только 3D-проектов, в которых использовался физический движок по умолчанию (это был Bullet) и не менялось вручную на GodotPhysics. Планов по повторному добавлению физики Bullet нет, но для этого можно создать стороннее дополнение благодаря GDExtension.
По умолчанию рендеринг в 2D больше не выполняется в HDR, что означает, что значения модуляции «overbright» не имеют видимого эффекта. Начиная с 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 по мере улучшения поддержки вышестоящих версий.
Более полный список функциональных регрессий можно найти, выполнив поиск по запросу issues, помеченным как «регрессия», но не «ошибка» на GitHub.
Подготовка перед обновлением (необязательно)
Если в будущем вы захотите обновиться до Godot 4, подумайте об использовании Tweener и синглтона Time в вашем проекте. Эти классы оба доступны в Godot 3.5 и более поздних версиях.
Таким образом, вы не будете полагаться на устаревшие Tween узлы и временные функции OS, оба из которых удалены в Godot 4.0.
Также хорошей идеей будет переименовать внешние шейдеры так, чтобы их расширение было .gdshader вместо .shader. Godot 3.x поддерживает оба расширения, но в Godot 4.0 поддерживается только .gdshader.
Запуск инструмента обновления проекта
Опасно
Make a full backup of your project (Сделать полную резервную копию вашего проекта) перед обновлением! Инструмент обновления проекта не будет выполнять никаких резервных копий обновляемого проекта.
Вы можете сделать резервную копию проекта, используя систему управления версиями, или скопировать папку проекта в другое место.
Использование Менеджера Проектов
Чтобы использовать инструмент обновления проекта:
Откройте Менеджер Проектов Godot 4.
Для импорта проекта в Godot 3.x используйте кнопку Импорт, или кнопку Сканировать, чтобы найти проект в папке.
Дважды нажмите по импортированному проекту (или выберите проект и нажмите Редактировать).
Вы увидите диалоговое окно с двумя вариантами: Конвертировать только project.godot и Конвертировать весь проект. Убедившись, что резервное копирование проекта выполнено (см. вышеприведенное предупреждение), выберите Конвертировать весь проект. Конвертировать только project.godot предназначен для использования в расширенных случаях использования только, в случае сбоя инструмента конвертации.
Дождитесь окончания процесса конвертации проекта. Для больших проектов с множеством сцен это может занять до нескольких минут.
Когда интерфейс Менеджера Проектов станет доступным снова, дважды щелкните по проекту (или выберите проект, после чего нажмите Редактировать), чтобы открыть его в редакторе.
Если у вас возникли проблемы с преобразованием из-за того, что некоторые файлы проекта слишком большие или длинные, вы можете использовать командную строку для обновления проекта (см. ниже). Это позволит вам обойти ограничения по размеру преобразователя.
Использование командной строки
Чтобы использовать инструмент для обновления проекта из command line, рекомендуется проверить преобразование проекта, запустив бинарный файл редактора 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 для согласованности с их 2D-аналогами. Например, 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 |
ГрадиентнаяТекстура1D |
КинематическоеТело |
ПерсонажТело3D |
KinematicBоdy2D |
ПерсонажТело2D |
Свет2D |
PointLight2D (Точечный свет 2d) |
LineShape2D |
WorldBoundaryShape2D (Мировая Граница Форма 2d) |
Listener |
AudioListener3D |
NavigationMeshInstance (Навигационная сетка экземпляра) |
NavigationRegion3D (Навигационная Область 3d) |
NavigationPolygonInstance (Навигационный полигон экземпляр) |
NavigationRegion2D (Навигационная Область 2d) |
Navigation2DServer (Навигация 2D -сервер) |
NavigationServer2D (Навигационный Сервер 2D) |
PanoramaSky (Панорама Неба) |
Sky |
Particles (Частицы) |
GPUParticles3D (Частицы Графического Процессора 3d) |
Particles2D (Частицы 2D) |
GPUParticles2D (Частицы графического процессора 2D) |
ParticlesMaterial (Частицы Материал) |
ParticleProcessMaterial (Материал процесса частиц) |
Physics2DDirectBodyState (Физика 2D Прямого Состояния Тела) |
PhysicsDirectBodyState2D (Физика прямого состояния тела 2d) |
Physics2DDirectSpaceState |
PhysicsDirectSpaceState2D |
Physics2DServer |
PhysicsServer2D (Физический сервер 2d) |
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. Несколько методов теперь статичны, что означает, что вы можете вызвать их напрямую без создания экземпляра класса.
Методы связанные с экраном или окном из синглтона OS (такие как
OS.get_screen_size()) были перемещены в синглтон DisplayServer. Именование методов также было измененно, чтобы иметь такую формуDisplayServer.<объект>_<get/set>_property(). Например,OS.get_screen_size()сталDisplayServer.screen_get_size().Методы связанные со временем и датой были перемещены из синглтона OS в синглтон Time. (Синглтон Time также доступен в версии Godot 3.5 и старше.)
Вам стоит сменить вызовы функции
instance()наinstantiate(). Конвертор должен обработать это автоматически, но это зависит от кода, поэтому он может не всегда срабатывать.Метод
set_autowrap()у AcceptDialog теперьset_autowrap_mode().Метод
process()``у AnimationNode теперь называется ``_process()(помни, подчеркивание в начале означает, что метод виртуальный).add_animation()в AnimationPlayer теперь называетсяadd_animation_library()и теперь использует AnimationLibrary.AnimationTree's
set_process_mode()теперьset_process_callback().Array's
empty()теперьis_empty().Array's
invert()теперьreverse().Array's
remove()теперьremove_at().Метод
get_points()у AStar2D и AStar3D теперь называетсяget_points_id().Метод
set_event()у BaseButton теперь называетсяset_shortcut().Camera2D's
get_h_offset()теперьget_drag_horizontal_offset().Метод
get_v_offset()у Camera2D теперь называетсяget_drag_vertical_offset().Camera2D's
set_h_offset()теперьset_drag_horizontal_offset().Метод
set_v_offset()у Camera2D теперь называетсяset_drag_vertical_offset().CanvasItem's
raise()теперьmove_to_front().Метод
update()у CanvasItem теперь называетсяqueue_redraw().Control's
get_stylebox()теперьget_theme_stylebox().Метод
set_tooltip()у Control теперь называется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()у Image теперь называетсяget_region().ImmediateGeometry's
set_normal()теперьsurface_set_normal().ImmediateMesh's
set_color()теперьsurface_set_color().ImmediateMesh's
set_uv()теперь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's
is_refusing_new_network_connections()теперьis_refusing_new_connections().Метод
is_listening()у PacketPeerUDP теперь называетсяis_bound().Метод
listen()у PacketPeerUDP теперь называетсяbind().Метод
set_flag()у ParticleProcessMaterial теперь называетсяset_particle_flag().PhysicsTestMotionResult2D's
get_motion()теперьget_travel().RenderingServer's
get_render_info()теперьget_rendering_info().Метод
get_dependencies()у ResourceFormatLoader теперь называется_get_dependencies()(помни, нижнее подчеркивание в начале метода, означает то, что он виртуальный).ResourceFormatLoader's
load()теперь_load().Метод
change_scene()у SceneTree теперь называетсяchange_scene_to_file().Метод
is_valid()у Shortcut теперь называетсяhas_valid_event().Метод
map_to_world()у TileMap теперь называетсяmap_to_local().Метод
world_to_map()у TileMap теперь называетсяlocal_to_map().У Transform2D методы
xform()иxform_inv()возвращают соответственноmat * vecиvec * mat.XRPositionalTracker's
get_name()теперьget_tracker_name().XRPositionalTracker's
get_type()теперьget_tracker_type().XRPositionalTracker's
_set_name()теперьget_tracker_name().
Свойства
Примечание
Если свойство указано здесь, то ассоцированный геттер и сеттер должны быть переименованы в ручную в проекте. Например, у PathFollow2D и PathFollow3D методы set_offset() и get_offset() должны быть переименованы в set_progress() и get_progress() соответственно.
УстройствоAudioServer теперьoutput_device.BaseButton's
groupтеперьbutton_group.Camera3D's
zfarтеперьfar.Camera3D's
znearтеперьnearПеременная
marginтеперь называетсяoffset.doubleclickдля InputEventMouseButton теперь называетсяdouble_click.altв InputEventWithModifiers теперьalt_pressed.commandInputEventWithModifiers теперь называетсяcommand_pressed.controlInputEventWithModifiers теперьctrl_pressed.metaInputEventWithModifiers теперь имеет значениеmeta_pressed.shiftв InputEventWithModifiers теперьshift_pressed.Свойство
percent_visibleтеперь называетсяvisible_ratio.У MultiPlayerAPI
refuse_new_network_connectionsтеперьrefuse_new_connections.Node's
filenameтеперьscene_file_path.PathFollow2D's
rotateтеперьrotates.У PathFollow2D и PathFollow3D
offsetтеперьprogress.RectangleShape2D's
extentsтеперьsizeУ TextureProgressBar
percent_visibleтеперьshow_percentage.Флажок
offтемы теперьunchecked.Theme's
ofsтеперьoffset.Theme's
onтеперьchecked.Window's
window_titleтеперьtitle.WorldMarginShape2D's
dтеперьdistance.Свойство
extentsв узлах CSG и VoxelGI придется заменить наsize, при этом установленное значение будет уменьшено вдвое (поскольку они больше не являются половинными экстентами). Это также влияет на его методы set/getset_extents()иget_extents().Свойство
Engine.editor_hintудалено в пользу методаEngine.is_editor_hint(). Это было сделано поскольку оно только для чтения, а свойства в Godot не могут быть только для чтения.
Перечисления
У CPUParticles2D
FLAG_MAXтеперьPARTICLE_FLAG_MAX.
Сигналы
У FileSystemDock
instantiateтеперьinstance.У CanvasItem
hideтеперьhidden. Это переименование не применяется к методуhide(), только к сигналу.У Tween
tween_all_completedтеперьloop_finished.У EditorSettings
changedтеперьsettings_changed.
Константы
Названия цветов теперь написаны большими буквами и используют нижнее подчеркивание между словами. Для примера,
Color.palegreenтеперьColor.PALE_GREEN.Константы
NOTIFICATION_у MainLoop были скопированы вNodeчто означает что вы можете удалить префиксMainLoop.при ссылке на них.У MainLoop
NOTIFICATION_WM_QUIT_REQUESTтеперьNOTIFICATION_WM_CLOSE_REQUEST.
Проверка настроек проекта
Несколько настроек проекта было переименовано, и некоторые из них имеют изменения в перечислениях нарушающих совместимость (например качество фильтра теней). Это означает что вам нужно установить некоторые настройки проекта заново. Убедитесь что Расширенные настройки включены в диалоге настроек проекта, так чтобы вы видели все настройки.
Проверка параметров Окружения
Настройки качества графики были перемещены из свойств Environment (Окружения) в настройки проекта. Это было сделано для того, чтобы упростить корректировку качества выполнения, без необходимости доступа к текущему активному ресурсу Environment и изменения его свойств.
Как результат, вам нужно будет настроить настройки качества Окружения в настройках проекта, так как старые настройки Окружения не конвертируются автоматически в настройках проекта.
Если в вашем проекте есть меню настройки графики которое изменяет свойства окружения в Godot 3.x, вам нужно изменить его код для вызова методов RenderingServer которые влияют на качество эффектов окружения. Только "базовый" переключатель каждого эффекта окружения и его визуальное отображение остается в ресурсе Окружения.
Обновление шейдеров
В шейдерах произошли некоторые изменения, которые не покрываются инструментом обновления. Вам нужно будет внести некоторые изменения вручную, особенно если ваш шейдер использует преобразования координатного пространства или пользовательскую функцию light().
Расширение файла .shader больше не поддерживается, что означает что вы должны переименовать файлы .shader в .gdshader и обновить соответствующие ссылки в файлах сцены/ресурсов использую внешний текстовый редактор.
Вот некоторые важные изменения, которые вам нужно будет внести в шейдеры:
Фильтр текстур и режимы повтора теперь должны устанавливаться на индивидуальных uniforms, а не на файлах текстур.
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, которая может сломать расширенные шейдеры. См. Введение в обратный Z (AKA Извините за поломку вашего шейдера).
См. Язык шейдеров для получения более подробной информации.
Этот список не является исчерпывающим. Если вы внесли все изменения, упомянутые здесь, и ваш шейдер все еще не работает, попробуйте обратиться за помощью в один из каналов сообщества.
Обновление скриптов с учетом изменений, несовместимых с предыдущими версиями
Некоторые изменения выполненные между версиями Godot 3.x и 4 не являются переименованиями, но по прежнему могут рушить обратную совместимость из-за разного поведения по умолчанию.
Самые важные примеры этого:
Функции жизненного цикла такие как
_ready()и_process()больше не вызывают неявно функции родительских классов которые имеют то же имя. Вместо этого, вы должны использоватьsuper()в начале вашей функции жизненного цикла в классе потомка так, чтобы родительская функция вызывалась первой.И String и StringName теперь есть в GDScript. Это обеспечивает большую оптимизацию, т.к. StringName специально создан, чтобы быть использованым как константная строка, которая будет создаваться один раз и переиспользоваться много раз. Эти типы не строго эквивалентны друг другу, это означает что
is_same("example", &"example")возвращаетfalse. Хоть и в большинстве случаев они взаимозаменяемы ("example" == &"example"возвращаетtrue), но иногда вы можете заменить"example"на&"example".синтаксис геттеров и сеттеров в GDScript был изменен, но он был конвертирован только частично конвертационным инструментом. В большинстве случаев, изменения в ручную необходимы для того, чтобы сеттеры и геттеры работали снова.
Синтаксис подключения сигнала GDScript был изменен. Инструмент преобразования будет использовать синтаксис на основе строк, которые все еще присутствуют в Godot 4, но рекомендуется переключиться на синтаксис на основе Signal, описанный на связанной странице. Таким образом, строки больше не используются, что позволяет избежать проблем с ошибками имен сигналов, которые можно обнаружить только во время выполнения.
Встроенные скрипты tool scripts не получат конвертацию ключевого слова
toolв аннотацию@tool.Узел Tween был удален ради Tweeners, который также доступен в Godot 3.5 и более старших версиях. Посмотрите original pull request.
randomize()теперь автоматически вызывается при загрузке проекта, так что детерминированная рандомизация глобального экземпляра RandomNumberGenerator требует ручной установки сида в скриптовой функции_ready().call_group(),set_group()иnotify_group()теперь применяются мгновенно по умолчанию. При вызове на большой функции, это может привести к замедлению если используется с группой из большого числа узлов. Для использования отложенных вызовов как прежде, заменитеcall_group(...)наcall_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)(а также сделайте то же самое сset_group()иnotify_group()соответственно).Вместо
rotation_degrees, свойствоrotationбыло открыто в редакторе, оно автоматически показывается в градусах в панели Инспектора. Это может сломать анимации, так как конвертация не обрабатывается автоматически утилитой конвертации.У AABB метод
has_no_surface()был инвертирован и переименован вhas_surface().У AABB и Rect2 метод
has_no_area()был инвертирован и переименован вhas_area().У AnimatedTexture свойство
fpsбыло заменено наspeed_scale, которое работает также, как и свойствоplayback_speedу AnimationPlayer.У AnimatedSprite2D и AnimatedSprite3D теперь свойство
speed_scaleможет иметь отрицательные значения. Это может сломать анимации если вы надеялись, чтоspeed_scaleвсегда будет больше 0.У AnimatedSprite2D и AnimatedSprite3D удалено свойство
playing. Используйте методыplay()/stop()вместо ИЛИ настройтеautoplayанимацию через нижнюю панель Кадры спрайта (но не оба одновременно).У Array второй параметр (
end) методаslice()исключает последний элемент, вместо того, чтобы включать его. Например, это означает, что[1, 2, 3].slice(0, 1)теперь возвращает[1]вместо[1, 2].Теперь сигналами BaseButton являются
button_upиbutton_down. Свойствоpressedтеперь называетсяbutton_pressed.У Camera2D свойство
rotatingбыло заменено наignore_rotation, инвертированное поведение.Свойство
zoomу Camera2D было инвертировано. Теперь более высокие значения приближают вместо того, чтобы отдалять.У Node метод
remove_and_skip()был удален. Если вам нужно использовать его в скрипте используйте старую C++ реализацию.OS.get_system_time_secs()стоит заменить наTime.get_time_dict_from_system()["second"].В классе ResourceSaver у метода
save()были переменены аргументы местами (resource: Resource, path: String). Это также относится к методу_save()у ResourceFormatSaver.Класс StreamPeerTCP теперь имеет
poll()вызываемый обновлением своего состояния, вместо зависимости отget_status()автоматического опроса: GH-59582У метода
right()класса String было изменено поведение <https://github.com/godotengine/godot/pull/36180>`__: теперь он возвращает число символов строки справа, а не с правой стороны строки из заданной позиции. Если вам нужно старое поведение, вы можете использоватьsubstr()вместо.is_connected_to_host()был удален из StreamPeerTCP и PacketPeerUDP в GH-59582.get_status()может использоваться в StreamPeerTCP вместо него.is_socket_connected()может использоваться в PacketPeerUDP вместо него.В
_get_property_list(), свойство строки подсказкиor_lesserтеперьor_less.В
_get_property_list()`, свойство строки подсказки ``nosliderтеперьno_slider.VisualShaderNodeVec4Parameter теперь принимает параметр Vector4 вместо Quaternion.
Удаленные или замененные узлы/ресурсы
В этом списке указаны все узлы, которые были заменены другим узлом, требующим иной конфигурации. Настройку необходимо выполнить заново, так как конвертер проектов не поддерживает обновление существующих конфигураций:
Удаленный узел |
Ближайший аналог |
Комментарий |
|---|---|---|
AnimationTreePlayer |
AnimationTree |
AnimationTreePlayer считается устаревшим с версии Godot 3.1. |
BakedLightmap |
LightmapGI |
Посмотрите Использование глобального освещения LightmapGI. |
BakedLightmapData |
LightmapGIData |
|
BitmapFont |
FontFile |
Посмотрите Использование Шрифтов. |
DynamicFont |
FontFile |
|
DynamicFontData |
FontFile |
|
ClippedCamera |
Camera2D или Camera3D |
Пирамидальная форма камеры была перемещена в :ref:'class_Camera3D'. |
InterpolatedCamera |
Camera2D или Camera3D |
|
Navigation2D |
Node2D |
Заменен на другие узлы 2D навигации. |
Navigation3D |
Node3D |
Заменен на другие узлы 3D навигации. |
OpenSimplexNoise |
FastNoiseLite |
Имеет другие параметры и больше типов шума таких как клеточный. Не поддерживает 4D шум т.к. он отсутствует в библиотеке FastNoiseLite. |
ToolButton |
Button |
ToolButton был Button с включенным по умолчанию свойством Flat. |
YSort |
Node2D или Control |
CanvasItem теперь имеет Y Sort Enabled свойство в версии 4.0. |
ProximityGroup |
Node3D |
VisibleOnScreenNotifier3D может использоваться в качестве замены. |
Portal |
Node3D |
Портал и комната окклюзивного куллинга были заменены на occlusion culling (узел OccluderInstance3D), которой требуется другой процесс настройки. |
Room |
Node3D |
|
RoomManager |
Node3D |
|
RoomGroup |
Node3D |
|
Occluder |
Node3D |
Геометрический окллюзионный куллинг был заменен на растровый occlusion culling (узел OccluderInstance3D), который требует другой процесс настройки. |
OccluderShapeSphere |
Resource |
При загрузке старого проекта, узел будет автоматически заменен на его Ближайший аналог (даже если не использовать утилиту обновления проекта).
Изменения многопоточности
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 снова.
Список автоматически переименованных методов, свойств, сигналов и констант
Файл исходного кода editor/renames_map_3_to_4.cpp содержит список всех автоматических переименований сделанных утилитой обновления проекта. Строки с комментариями отсылают к переименованиям API в cannot be performed automatically.
Перенос настроек редактора
Godot 3.x и Godot 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.