Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Actualizar de Godot 3 a Godot 4

¿Debería actualizar a Godot 4?

Antes de comenzar el proceso de actualización, hay que pensar sobre las ventajas y desventajas que esto brindará a tu proyecto.

Ventajas de actualizar

Junto con las nuevas caracteristicas presentadas en la 4.0, actualizar da las siguientes ventajas:

  • Se corrigieron muchos errores en 4.0 que pueden no haberse resuelto en 3.x por diversas razones (como diferencias de API gráfica o problemas de retrocompatibilidad).

  • 4.x tendrá un periodo de soporte mayor. Godot 3.x continuará siendo soportado por un tiempo después del lanzamiento de 4.0, pero eventualmente dejará de recibir soporte.

Consulta Registro de cambios de la documentación para ver una lista de páginas que documentan las nuevas características en Godot 4.0.

Desventajas de actualizar

Si no necesitas ninguna de las características presentes en Godot 4.0, es posible que desees permanecer en Godot 3.x por las siguientes razones:

  • Godot 3.x ha sido probado y funciona, mientras que Godot 4 sigue en sus etapas iniciales.

    • Se espera que Godot 4.0 contenga problemas de flujo de trabajo y rendimiento que Godot 3.x no tiene. Estos problemas se resolverán con el tiempo en futuras versiones de Godot 4.x.

  • Godot 4 cuenta con menos tutoriales de terceros disponibles en comparación con Godot 3.x. Si eres nuevo en los motores de juegos, es posible que tengas una mejor experiencia usando Godot 3.x.

  • Los requisitos básicos de hardware de Godot 4 (como el uso de memoria) son ligeramente más altos, tanto para el editor como para los proyectos exportados. Esto fue necesario para la implementación de algunas optimizaciones centrales.

  • Dado que Godot 4 incluye más características que Godot 3, el tamaño binario de los proyectos exportados en Godot 4 es más grande. Aunque esto puede ser mitigado mediante la optimización de una compilación para reducir su tamaño, una compilación 4.0 con un conjunto determinado de módulos habilitados seguirá siendo más grande en comparación con una compilación 3.x con los mismos módulos. Esto puede ser un problema para exportar a la Web, ya que el tamaño binario influye directamente en la rapidez con la que el motor puede inicializarse (independientemente de la velocidad de descarga).

  • Godot 4 no cuenta ni contará con soporte para renderizado GLES2. (Aún se mantiene el soporte para renderizado GLES3 utilizando el nuevo backend de OpenGL, lo que significa que los dispositivos sin soporte para Vulkan aún pueden ejecutar Godot 4.)

    • Si estás apuntando a hardware muy antiguo, como los gráficos integrados de Intel Sandy Bridge (2da generación), esto impedirá que el proyecto se ejecute en ese hardware después de la actualización. Se pueden usar implementaciones de software de OpenGL para evitar esta limitación, pero son demasiado lentas para juegos.

Limitaciones al actualizar

**Dado que Godot 4 es una reescritura completa en muchos aspectos, desafortunadamente, algunas características se han perdido en el proceso. ** Es posible que algunas de estas características se restauren en futuras versiones de Godot:

  • La física de Bullet fue eliminada en favor de GodotPhysics. Esto sólo afecta a los proyectos 3D que utilizaban el motor de física por defecto (que era Bullet) y no lo cambiaron manualmente a GodotPhysics. No hay planes para volver a añadir la física Bullet en el núcleo, pero podría crearse un complemento de terceros para ello gracias a GDExtension.

  • El renderizado en 2D ya no se realiza en HDR, lo que significa que los valores de modulación "muy brillantes" no tienen efecto visible. Se planea restaurar esto en algún momento en el futuro.

  • Si bien el renderizado aún ocurre en HDR en 3D cuando se utiliza el backend Forward Plus o Forward Mobile, los Viewports ya no pueden devolver datos HDR. Se planea restaurar esto en algún momento en el futuro.

  • Mono fue reemplazado por .NET 6. Esto significa que exportar proyectos en C# a Android, iOS y HTML5 ya no está soportado por ahora. Sin embargo, exportar proyectos en C# a plataformas de escritorio sigue siendo compatible, y a partir de la versión 4.2 hay soporte experimental para exportar a plataformas móviles. El soporte para exportar proyectos en C# a más plataformas se restaurará en futuras versiones 4.x a medida que mejore el soporte upstream.

Puedes encontrar una lista mas completa de regresiones funcionales buscando por problemas etiquetados "regression" pero no "bug" en GitHub.

Preparar antes de la actualización (opcional)

Si deseas estar preparado para actualizar a Godot 4 en el futuro, considera utilizar :ref: `class_Tweener`y el singleton :ref:`class_Time`en tu proyecto. Ambas clases están disponibles en Godot 3.5 y versiones posteriores.

De esta manera, no dependerás del nodo Tween y las funciones del tiempo del sistema operativo que están obsoletas y que están eliminadas en Godot 4.0.

También es una buena idea renombrar los shaders externos para que su extensión sea .gdshader en lugar de .shader. Godot 3.x soporta ambas extensiones, pero sólo .gdshader está soportado en Godot 4.0.

Ejecutando la herramienta de actualización del proyecto

Advertencia

¡Realiza una copia de seguridad completa de tu proyecto antes de actualizarlo!. La herramienta de actualización de proyectos no realizará ninguna copia de seguridad del proyecto que se está actualizando.

Puedes hacer una copia de seguridad de un proyecto utilizando el control de versiones o copiando la carpeta del proyecto en otra ubicación.

Utilizando el Administrador de Proyectos

Para usar la herramienta de actualización de proyecto:

  1. Abre el Administrador de Proyecto de Godot 4.

  2. Importa el proyecto de Godot 3.x utilizando el botón Importar, o usa el botón Escanear para encontrar el proyecto dentro de una carpeta.

  3. Haz doble clic en el proyecto importado (o selecciona el proyecto y luego elige Editar).

  4. Verás un diálogo que aparece don dos opciones: Convertir Solo project.godot y Convertir Proyecto Completo. Después de asegurarte de que tu proyecto esté respaldado (ver la advertencia anterior), elige Convertir Proyecto Completo. Convertir Solo project.godot está destinado a ser utilizado solo para casos de uso avanzado, en caso de que la herramienta de conversión falle.

  5. Espera hasta que termine el proceso de conversión del proyecto. Esto puede tardar unos minutos en proyectos grandes con muchas escenas.

  6. Cuando la interfaz del Administrador de Proyectos esté disponible nuevamente, haz doble clic en el proyecto (o selecciona el proyecto y luego elige Editar) para abrirlo en el editor.

Si encuentras problemas de conversión debido a que algunos archivos del proyecto son demasiado grandes o largos, puedes utilizar la línea de comandos para actualizar el proyecto (ver abajo). Esto te permitirá anular los límites de tamaño del convertidor.

Usando la línea de comandos

Para utilizar la herramienta de actualización de proyectos desde la línea de comandos, se recomienda validar la conversión del proyecto ejecutando el binario del editor de Godot con los siguientes argumentos:

# [<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>]

Si la lista de actualizaciones planeadas te parece bien, ejecuta el siguiente comando en el binario del editor de Godot para actualizar los archivos del proyecto:

# [<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>] y [<max_line_size>] son argumentos opcionales para especificar el tamaño máximo de los archivos que se convertirán (en kilobytes y líneas). Los límites predeterminados son de 4 MB y 100,000 líneas respectivamente. Si un archivo alcanza cualquiera de esos límites, no será actualizado por el convertidor de proyectos. Esto es útil para evitar que recursos grandes ralenticen la actualización.

Si aún deseas que los archivos grandes sean convertidos por la herramienta de actualización de proyectos, aumenta los límites de tamaño al ejecutar la herramienta de actualización de proyectos. Por ejemplo, ejecutar el binario del editor de Godot con esos argumentos aumenta ambos límites en un factor de 10×:

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

Nota

Solo los proyectos de Godot 3.0 y versiones posteriores pueden ser actualizados utilizando la herramienta de conversión de proyectos que se encuentra en el editor de Godot 4.

Se recomienda asegurarse de que tu proyecto esté actualizado con la última versión estable de la serie 3.x antes de ejecutar la herramienta de actualización de proyectos.

Reparando el proyecto después de ejecutar la herramienta de actualización de proyectos

Después de actualizar el proyecto, es posible que notes que ciertas cosas no se ven como deberían. Es probable que los scripts también contengan varios errores (posiblemente cientos en proyectos grandes). Esto se debe a que la herramienta de actualización de proyectos no puede atender todas las situaciones. Por lo tanto, gran parte del proceso de actualización sigue siendo manual.

Nodos y recursos renombrados automáticamente

La lista a continuación se refiere a nodos que simplemente fueron renombrados por consistencia o claridad en Godot 4.0. La herramienta de actualización de proyectos los renombra automáticamente en tus scripts.

Un conjunto destacado de cambios de nombre es el de los nodos 3D, ya que todos recibieron un sufijo 3D añadido para mantener coherencia con sus contrapartes en 2D. Por ejemplo, Area``ahora es ``Area3D.

Para facilitar la búsqueda, esta tabla enumera todos los nodos y recursos que fueron renombrados y se convierten automáticamente, excluyendo aquellos que solo implicaban agregar un sufijo 3D al nombre antiguo:

Nombre antiguo (Godot 3.x)

Nuevo nombre (Godot 4)

AnimatedSprite

AnimatedSprite2D

ARVRCamera

XRCamera3D

ARVRController

XRController3D

ARVRAnchor

XRAnchor3D

ARVRInterface

XRInterface

ARVROrigin

XROrigin3D

ARVRPositionalTracker

XRPositionalTracker

ARVRServer

XRServer

CubeMesh

BoxMesh

EditorSpatialGizmo

EditorNode3DGizmo

EditorSpatialGizmoPlugin

EditorNode3DGizmoPlugin

GIProbe

VoxelGI

GIProbeData

VoxelGIData

GradientTexture

GradientTexture1D

KinematicBody

CharacterBody3D

KinematicBody2D

CharacterBody2D

Light2D

PointLight2D

LineShape2D

WorldBoundaryShape2D

Oyente

AudioListener3D

NavigationMeshInstance

NavigationRegion3D

NavigationPolygonInstance

NavigationRegion2D

Navigation2DServer

NavigationServer2D

PanoramaSky

Sky

Partículas

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

Renombrando manualmente métodos, propiedades, señales y constantes

Debido a cómo funciona la herramienta de actualización de proyectos, no todos los cambios de nombre de la API pueden realizarse automáticamente. La lista a continuación contiene todos los cambios de nombre que deben realizarse manualmente utilizando el editor de scripts.

Si no puedes encontrar un nodo o recurso en la lista a continuación, consulta la tabla anterior para encontrar su nuevo nombre.

Truco

Puedes usar el diálogo Reemplazar en Archivos para acelerar el reemplazo presionando Ctrl + Shift + R mientras el editor de scripts está abierto. Sin embargo, ten cuidado ya que el diálogo Reemplazar en Archivos no ofrece ninguna forma de deshacer un reemplazo. Utiliza el control de versiones para confirmar tu trabajo de actualización regularmente. También se pueden utilizar herramientas de línea de comandos como sd si necesitas algo más flexible que el diálogo Reemplazar en Archivos del editor.

Si estás utilizando C#, recuerda buscar usos obsoletos de la API con notación PascalCase en el proyecto (y realiza el reemplazo con notación PascalCase).

Métodos

  • Las clases File y Directory fueron reemplazadas por FileAccess y DirAccess, las cuales tienen una API completamente diferente. Varios métodos son ahora estáticos, lo que significa que puedes llamarlos directamente en FileAccess o DirAccess sin necesidad de crear una instancia de esa clase.

  • Los métodos, relacionados con la pantalla y la ventana, del singleton OS (como OS.get_screen_size()) se trasladaron al singleton DisplayServer. También se modificó el nombre del método para usar la forma DisplayServer.<object>_<get/set>_property(). Por ejemplo, OS.get_screen_size() se convierte en DisplayServer.screen_get_size().

  • Los métodos relacionados con la hora y la fecha del singleton OS se trasladaron al singleton Time. (El singleton Time también está disponible en Godot 3.5 y versiones posteriores.)

  • Es posible que tengas que reemplazar algunas llamadas de instance() con instantiate(). El convertidor debería manejar esto automáticamente, pero esto depende de código personalizado que puede no funcionar en el 100% de las situaciones.

  • AcceptDialog set_autowrap() es ahora set_autowrap_mode().

  • AnimationNode process() es ahora _process() (tener en cuenta el símbolo inicial que denota que es un método virtual).

  • AStar2D y AStar3D get_points() es ahora get_points_id().

  • BaseButton set_event() es ahora set_shortcut().

  • Camera2D get_v_offset() es ahora get_drag_vertical_offset().

  • Camera2D set_v_offset() es ahora set_drag_vertical_offset().

  • En CanvasItem, el método update() se ha cambiado a queue_redraw().

  • En Control, el método set_tooltip() se ha cambiado a set_tooltip_text().

  • EditorNode3DGizmoPlugin create_gizmo() es ahora _create_gizmo() (nota el símbolo inicial, el cual denota que es un método virtual).

  • ENetMultiplayerPeer get_peer_port() es ahora get_peer().

  • FileDialog get_mode() es ahora get_file_mode().

  • FileDialog set_mode() es ahora set_file_mode().

  • GraphNode get_offset() es ahora get_position_offset().

  • GridMap world_to_map() es ahora local_to_map().

  • GridMap map_to_world() es ahora map_to_local().

  • Image get_rect() es ahora get_region().

  • ItemList get_v_scroll() es ahora get_v_scroll_bar().

  • MultiPlayerAPI get_network_connected_peers() es ahora get_peers().

  • MultiPlayerAPI get_network_peer() es ahora get_peer().

  • MultiPlayerAPI get_network_unique_id() es ahora get_unique_id().

  • MultiPlayerAPI has_network_peer() es ahora has_multiplayer_peer().

  • PacketPeerUDP is_listening() es ahora is_bound().

  • PacketPeerUDP listen() es ahora bind().

  • ParticleProcessMaterial set_flag() es ahora set_particle_flag().

  • ResourceFormatLoader get_dependencies() es ahora _get_dependencies() (nota el símbolo inicial, el cual denota que es un método virtual).

  • SceneTree change_scene() es ahora change_scene_to_file().

  • Shortcut is_valid() es ahora has_valid_event().

  • TileMap world_to_map() es ahora local_to_map().

  • TileMap map_to_world() es ahora map_to_local().

Propiedades

Nota

Si una propiedad está listada aquí, sus métodos asociados getter y setter también deben ser renombrados manualmente si se usan en el proyecto. Por ejemplo, los métodos set_offset() y get_offset() de PathFollow2D y PathFollow3D deben ser renombrados a set_progress() y get_progress(), respectivamente.

  • Control margin es ahora offset.

  • Label percent_visible es ahora visible_ratio.

  • MultiPlayerAPI refuse_new_network_connections es ahora refuse_new_connections.

  • PathFollow2D y PathFollow3D offset es ahora progress.

  • TextureProgressBar percent_visible es ahora show_percentage.

  • La propiedad extents en nodos CSG y VoxelGI tendrá que ser reemplazada por size, con el valor establecido dividido por la mitad (ya que ya no son semi-extents). Esto también afecta a sus métodos setter/getter set_extents() y get_extents().

  • La propiedad Engine.editor_hint fue eliminada en favor del método Engine.is_editor_hint() . Esto se debe a que es de sólo lectura, y en Godot las propiedades no se usan para valores de sólo lectura.

Enumeraciones

  • CPUParticles2D FLAG_MAX es ahora PARTICLE_FLAG_MAX.

Señales

  • FileSystemDock instantiate es ahora instance.

  • El método hide de CanvasItem ahora se llama hidden. Este cambio no afecta al método hide(), sólo a la señal.

  • Tween tween_all_completed es ahora loop_finished.

  • EditorSettings changed es ahora settings_changed.

Constantes

  • Los nombres de los colores ahora están en mayúsculas y usan guiones bajos entre palabras. Por ejemplo, Color.palegreen ahora es Color.PALE_GREEN.

  • Las constantes NOTIFICATION_ de MainLoop fueron duplicadas a Node lo que significa que puede eliminar el prefijo MainLoop. cuando haga referencia a ellas.

  • MainLoop NOTIFICATION_WM_QUIT_REQUEST es ahora NOTIFICATION_WM_CLOSE_REQUEST.

Comprobando la configuración del proyecto

Se cambió el nombre de varias configuraciones del proyecto y a algunas de ellas se les cambiaron las enumeraciones de manera incompatible (como la calidad del filtro de sombras). Esto significa que es posible que necesites volver a establecer algunos valores en la configuración del proyecto. Asegúrate que en la opción Avanzado esté habilitada en el cuadro de diálogo de la configuración del proyecto para que puedas ver todas las configuraciones del proyecto.

Comprobando la configuración del entorno

La configuración de calidad gráfica se trasladó de las propiedades del entorno a la configuración del proyecto. Esto se hizo para facilitar los ajustes de calidad durante el tiempo de ejecución, sin necesidad de acceder al recurso de Entorno activo y modificar sus propiedades.

Como resultado, deberás configurar la calidad del Entorno en la configuración del proyecto, ya que las antiguas configuraciones de calidad del Entorno no se convierten automáticamente a la configuración del proyecto.

Si tienes un menú de configuración de gráficos que modificaba propiedades de entorno en Godot 3.x, tendrás que cambiar su código para llamar a los métodos de RenderingServer que afectan la calidad de los efectos del entorno. Sólo el interruptor "base" de cada efecto de entorno y sus controles visuales permanecen dentro del recurso de Entorno.

Actualizando los shaders

Ha habido algunos cambios en los shaders que no están cubiertos por la herramienta de actualización.

La extensión de archivo .shader ya no está soportada, lo que significa que debes renombrar los archivos .shader a .gdshader y actualizar las referencias correspondientes en los archivos de escena/recursos utilizando un editor de texto externo.

Algunos cambios de nombre notables que tendrás que realizar en los shaders son:

  • Los modos de filtro de textura y repetición ahora se establecen en uniformes individuales, en lugar de en los archivos de textura mismos.

  • hint_albedo es ahora``source_color``.

  • Las variables de matrices integradas fueron renombradas.

  • Los shaders de partículas ya no utilizan la función del procesador vertex(). En su lugar utilizan start() y process().

Consulta Lenguaje de shading para más información.

Actualización de los scripts para tener en cuenta los cambios incompatibles con las versiones anteriores

Algunos cambios realizados entre Godot 3.x y 4 no son cambios de nombre, sino que rompen la compatibilidad con versiones anteriores debido a un comportamiento predeterminado diferente.

Los ejemplos más destacados de ésto son:

  • Las funciones del ciclo de vida como _ready() y _process() ya no llaman implícitamente a las funciones de las clases padre que tienen el mismo nombre. En su lugar, debes usar super() al principio de una función del ciclo de vida en la clase hija para que se llame primero a la función de la clase padre.

  • Tanto String como StringName ahora están expuestos a GDScript. Esto permite una mayor optimización, ya que StringName está diseñado específicamente para ser utilizado para cadenas "constantes" que se crean una vez y se reutilizan muchas veces. Estos tipos no son estrictamente equivalentes entre sí, lo que significa que is_same("ejemplo", &"ejemplo") devuelve false. Aunque en la mayoría de los casos son intercambiables ("ejemplo" == &"ejemplo" devuelve true), a veces puede que tengas que reemplazar "ejemplo" con &"ejemplo".

  • La sintaxis de los setter y getter de GDScript ha sido modificada, pero solo es parcialmente convertida por la herramienta de conversión. En la mayoría de los casos, se requieren cambios manuales para que los setter y getter funcionen nuevamente.

  • La sintaxis de conexión de señales de GDScript ha sido modificada. La herramienta de conversión utilizará la sintaxis basada en cadenas, que todavía está presente en Godot 4, pero se recomienda cambiar a la sintaxis basada en Signal descrita en la página enlazada. De esta manera, las cadenas ya no están involucradas, lo que evita problemas con errores en el nombre de la señal que solo pueden descubrirse durante la ejecución.

  • Los scripts integrados que son scripts de herramienta no tienen la palabra clave tool convertida a la anotación @tool.

  • El nodo Tween fue eliminado en favor de Tweeners, los cuales también están disponibles en Godot 3.5 y versiones posteriores. Consulta el pull request original para obtener más detalles.

  • Ahora randomize() se llama automáticamente al cargar el proyecto, por lo que la aleatoriedad determinista con la instancia global RandomNumberGenerate requiere establecer manualmente una semilla en la función _ready() de un script.

  • call_group(), set_group() y notify_group() ahora son inmediatos por defecto. Si estás llamando una función costosa, esto puede resultar en inestabilidad cuando se usa en un grupo que contiene un gran número de nodos. Para utilizar llamadas diferidas como antes, reemplaza call_group_flags(SceneTree. GROUP_CALL_DEFERRED, . . . ) (y haz lo mismo con set_group() y notify_group() respectivamente).

  • En lugar de rotation_degrees, la propiedad rotation está expuesta en el editor, la cual se muestra automáticamente como grados en el panel del Inspector. Esto puede afectar las animaciones, ya que la conversión no se manejada automáticamente por la herramienta de conversión.

  • AABB has_no_surface() fue invertido y renombrado como has_surface().

  • AABB y Rect2 has_no_area() fue invertido y renombrado como has_area().

  • AnimatedTexture la propiedad fps fue reemplazada por speed_scale, que funciona igual que la propiedad playback_speed de AnimationPlayer.

  • AnimatedSprite2D y AnimatedSprite3D ahora permiten valores negativos speed_scale`. Esto puede romper las animaciones si confías en que speed_scale esté internamente sujeta a 0.0.

  • AnimatedSprite2D y AnimatedSprite3D propiedades playing` fueron eliminadas. Usa el método play()`/`stop() en su lugar, o configura la animación autoplay a través del panel inferior de SpriteFrames (pero no ambos a la vez).

  • Array El segundo parámetro slice() (end) es ahora exclusivo, en lugar de inclusivo. Por ejemplo, esto significa que [1, 2, 3].slice(0, 1) ahora devuelve [1] en lugar de [1, 2].

  • BaseButton las señales son ahora button_up y button_down. La propiedad pressed ahora es button_pressed.

  • Camera2D la propiedad rotating fue reemplazada por ignore_rotation, que ha invertido el comportamiento.

  • La propiedad zoom de Camera2D se ha invertido: los valores más grandes ahora se acercan más en lugar de alejarse.

  • Node's remove_and_skip() method was removed. If you need to reimplement it in a script, you can use the old C++ implementation as a reference.

  • OS.get_system_time_secs() se deberían convertir a Time.get_time_dict_from_system()["second"].

  • El método save() de ResourceSaver ahora tiene sus argumentos intercambiados (resource: Resource, path: String). Esto también se aplica al método _save() de ResourceFormatSaver.

  • Una StreamPeerTCP debe tener un llamado a poll() para actualizar su estado, en lugar de depender de que get_status() realice automáticamente el sondeo: GH-59582

  • El método right() de String ha cambiado de comportamiento: ahora devuelve un número de caracteres desde la derecha de la cadena, en lugar de devolver el lado derecho de la cadena desde una posición dada. Si necesitas el comportamiento anterior, puedes usar substr() en su lugar.

  • is_connected_to_host() fue eliminado de StreamPeerTCP y PacketPeerUDP según lo indicado en GH-59582. En StreamPeerTCP, puedes usar get_status() en su lugar. En PacketPeerUDP, puedes usar is_socket_connected().

  • En _get_property_list(), la cadena de sugerencia de propiedad or_lesser es ahora or_less.

  • En _get_property_list(), la cadena de sugerencia de propiedad noslider es ahora no_slider`.

  • VisualShaderNodeVec4Parameter ahora toma un Vector4 como parámetro en lugar de un Quaternion.

Nodos/recursos eliminados o reemplazados

Esto lista todos los nodos que fueron reemplazados por otro nodo que requieren una configuración diferente. La configuración debe hacerse desde cero de nuevo, ya que el convertidor de proyectos no admite la actualización de configuraciones existentes:

Nodo eliminado

Aproximación más cercana

Comentario

AnimationTreePlayer

AnimationTree

AnimationTreePlayer está obsoleto desde Godot 3.1.

BakedLightmap

LightmapGI

Ver Using Lightmap global illumination.

BakedLightmapData

LightmapGIData

BitmapFont

FontFile

Ver Using Fonts.

DynamicFont

FontFile

DynamicFontData

FontFile

Navigation2D

Nodo 2D

Sustituido por otros nodos de Navegación 2D.

Navigation3D

Node3D

Sustituido por otros nodos de Navegación 3D.

OpenSimplexNoise

FastNoiseLite

Tiene parámetros diferentes y más tipos de ruido, como el celular. No soporta ruido 4D ya que está ausente de la librería FastNoiseLite.

ToolButton

Button

ToolButton era un Button con la propiedad Flat habilitada por defecto.

YSort

Node2D o Control

CanvasItem tiene una nueva propiedad Y Sort Enabled en 4.0.

ProximityGroup

Node3D

VisibleOnScreenNotifier3D puede actuar como sustituto.

Portal

Node3D

La selección de oclusión de portal y habitación fue reemplazado por el culling de oclusión (nodo OccluderInstance3D), lo cual requiere un proceso de configuración diferente.

Room

Node3D

RoomManager (Administrador de Salas)

Node3D

RoomGroup

Node3D

Occluder

Node3D

El culling de oclusión de geometría fue reemplazado por el culling de oclusión raster (nodo OccluderInstance3D), lo cual requiere un proceso de configuración diferente.

OccluderShapeSphere

Resource

Si cargas un proyecto antiguo, el nodo será reemplazado con su Aproximación más cercana automáticamente (incluso si no se utiliza la herramienta de actualización del proyecto).

Cambios en el manejo de hilos

Las APIs de Threading han cambiado en la versión 4.0. Por ejemplo, el siguiente fragmento de código en Godot 3.x debe ser modificado para funcionar en 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() ya no se utiliza y debe convertirse a Thread.is_alive().

Ver también

Consulta el registro de cambios para obtener una lista completa de los cambios entre Godot 3.x y 4.

Interrupción de compatibilidad de recursos ArrayMesh

Si has guardado un recurso ArrayMesh en un archivo .res o .tres, el formato utilizado en 4.0 no es compatible con el utilizado en 3.x. Necesitarás volver a importar el archivo de malla fuente y guardarlo nuevamente como un recurso ArrayMesh.

Lista de métodos, propiedades, señales y constantes renombrados automáticamente

El archivo fuente editor/renames_map_3_to_4.cpp enumera todos los cambios de nombre automáticos realizados por la herramienta de actualización del proyecto. Las líneas comentadas se refieren a los cambios en nombres de la API que no pueden realizarse automáticamente.

Portando configuraciones del editor

Godot 3.x y 4.0 utilizan diferentes archivos de configuración del editor. Esto significa que sus ajustes pueden cambiarse de forma independiente uno del otro.

Si deseas transferir tu configuración de Godot 3.x a Godot 4, abre la carpeta de configuración del editor y copia editor_settings-3.tres a editor_settings-4.tres mientras el editor de Godot 4 está cerrado.

Nota

Muchos nombres y categorías de configuración han cambiado desde Godot 3.x. Las configuraciones del editor cuyo nombre o categoría haya cambiado no se transferirán a Godot 4.0; tendrás que volver a establecer sus valores.