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:
Abre el Administrador de Proyecto de Godot 4.
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.
Haz doble clic en el proyecto importado (o selecciona el proyecto y luego elige Editar).
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.
Espera hasta que termine el proceso de conversión del proyecto. Esto puede tardar unos minutos en proyectos grandes con muchas escenas.
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 formaDisplayServer.<object>_<get/set>_property()
. Por ejemplo,OS.get_screen_size()
se convierte enDisplayServer.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()
coninstantiate()
. 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 ahoraset_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 ahoraget_points_id()
.BaseButton
set_event()
es ahoraset_shortcut()
.Camera2D
get_v_offset()
es ahoraget_drag_vertical_offset()
.Camera2D
set_v_offset()
es ahoraset_drag_vertical_offset()
.En CanvasItem, el método
update()
se ha cambiado aqueue_redraw()
.En Control, el método
set_tooltip()
se ha cambiado aset_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 ahoraget_peer()
.FileDialog
get_mode()
es ahoraget_file_mode()
.FileDialog
set_mode()
es ahoraset_file_mode()
.GraphNode
get_offset()
es ahoraget_position_offset()
.GridMap
world_to_map()
es ahoralocal_to_map()
.GridMap
map_to_world()
es ahoramap_to_local()
.Image
get_rect()
es ahoraget_region()
.ItemList
get_v_scroll()
es ahoraget_v_scroll_bar()
.MultiPlayerAPI
get_network_connected_peers()
es ahoraget_peers()
.MultiPlayerAPI
get_network_peer()
es ahoraget_peer()
.MultiPlayerAPI
get_network_unique_id()
es ahoraget_unique_id()
.MultiPlayerAPI
has_network_peer()
es ahorahas_multiplayer_peer()
.PacketPeerUDP
is_listening()
es ahorais_bound()
.PacketPeerUDP
listen()
es ahorabind()
.ParticleProcessMaterial
set_flag()
es ahoraset_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 ahorachange_scene_to_file()
.Shortcut
is_valid()
es ahorahas_valid_event()
.TileMap
world_to_map()
es ahoralocal_to_map()
.TileMap
map_to_world()
es ahoramap_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 ahoraoffset
.Label
percent_visible
es ahoravisible_ratio
.MultiPlayerAPI
refuse_new_network_connections
es ahorarefuse_new_connections
.PathFollow2D y PathFollow3D
offset
es ahoraprogress
.TextureProgressBar
percent_visible
es ahorashow_percentage
.La propiedad
extents
en nodos CSG y VoxelGI tendrá que ser reemplazada porsize
, con el valor establecido dividido por la mitad (ya que ya no son semi-extents). Esto también afecta a sus métodos setter/getterset_extents()
yget_extents()
.La propiedad
Engine.editor_hint
fue eliminada en favor del métodoEngine.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 ahoraPARTICLE_FLAG_MAX
.
Señales
FileSystemDock
instantiate
es ahorainstance
.El método
hide
de CanvasItem ahora se llamahidden
. Este cambio no afecta al métodohide()
, sólo a la señal.Tween
tween_all_completed
es ahoraloop_finished
.EditorSettings
changed
es ahorasettings_changed
.
Constantes
Los nombres de los colores ahora están en mayúsculas y usan guiones bajos entre palabras. Por ejemplo,
Color.palegreen
ahora esColor.PALE_GREEN
.Las constantes
NOTIFICATION_
de MainLoop fueron duplicadas aNode
lo que significa que puede eliminar el prefijoMainLoop.
cuando haga referencia a ellas.MainLoop
NOTIFICATION_WM_QUIT_REQUEST
es ahoraNOTIFICATION_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``.Los shaders de partículas ya no utilizan la función del procesador
vertex()
. En su lugar utilizanstart()
yprocess()
.
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 usarsuper()
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")
devuelvefalse
. Aunque en la mayoría de los casos son intercambiables ("ejemplo" == &"ejemplo"
devuelvetrue
), 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()
ynotify_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, reemplazacall_group_flags(SceneTree. GROUP_CALL_DEFERRED, . . . )
(y haz lo mismo conset_group()
ynotify_group()
respectivamente).En lugar de
rotation_degrees
, la propiedadrotation
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 comohas_surface()
.AABB y Rect2
has_no_area()
fue invertido y renombrado comohas_area()
.AnimatedTexture la propiedad
fps
fue reemplazada porspeed_scale
, que funciona igual que la propiedadplayback_speed
de AnimationPlayer.AnimatedSprite2D y AnimatedSprite3D ahora permiten valores negativos
speed_scale`
. Esto puede romper las animaciones si confías en quespeed_scale
esté internamente sujeta a0.0
.AnimatedSprite2D y AnimatedSprite3D propiedades
playing`
fueron eliminadas. Usa el métodoplay()`/`stop()
en su lugar, o configura la animaciónautoplay
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
ybutton_down
. La propiedadpressed
ahora esbutton_pressed
.Camera2D la propiedad
rotating
fue reemplazada porignore_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 aTime.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 queget_status()
realice automáticamente el sondeo: GH-59582El 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 usarsubstr()
en su lugar.is_connected_to_host()
fue eliminado de StreamPeerTCP y PacketPeerUDP según lo indicado en GH-59582. En StreamPeerTCP, puedes usarget_status()
en su lugar. En PacketPeerUDP, puedes usaris_socket_connected()
.En
_get_property_list()
, la cadena de sugerencia de propiedador_lesser
es ahoraor_less
.En
_get_property_list()
, la cadena de sugerencia de propiedadnoslider
es ahorano_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 |
|
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.