Up to date

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

Actualizando de Godot 4.0 a Godot 4.1

Para la mayoría de los juegos y aplicaciones creados con 4.0, debería ser relativamente seguro migrar a 4.1. Esta página tiene la intención cubrir todo lo que necesitas considerar al migrar tu proyecto.

Cambios importantes

Si estás migrando de 4.0 a 4.1, los cambios importantes listados aquí podrían afectarte. Los cambios están agrupados por áreas/sistemas.

Advertencia

La API de GDExtension rompe completamente la compatibilidad en 4.1, por lo que no está incluida en la siguiente tabla. Consulta la sección Actualizando su GDExtension para la versión 4.1 para obtener más información.

Este artículo indica si cada cambio significativo afecta a GDScript y si el cambio significativo en C# es compatible binario o compatible con el código fuente:

  • Compatible con binarios - Los binarios existentes se cargarán y ejecutarán con éxito sin recompilación, y el comportamiento en tiempo de ejecución no cambiará.

  • Compatible con el código fuente: el código fuente se compila correctamente sin ningún cambio al actualizar Godot.

Núcleo

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

Basis

El método looking_at añade un nuevo parámetro opcional use_model_front

✔️

✔️

✔️

GH-76082

Object

El método get_meta_list cambia el tipo retornado de PackedStringArray a Array[StringName]

✔️

GH-76418

Transform3D

El método looking_at añade un nuevo parámetro opcional use_model_front

✔️

✔️

✔️

GH-76082

UndoRedo

El método create_action añade un nuevo parámetro opcional backward_undo_ops

✔️

|✔️ compatible|

✔️

GH-76688

WorkerThreadPool

El método wait_for_task_completion cambia el tipo retornado de void a Error

✔️

✔️

GH-77143

Animación

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

AnimationNode

El método _process añade un nuevo parámetro test_only

GH-75759

El método blend_input añade un nuevo parámetro opcional test_only

✔️

|✔️ compatible|

✔️

GH-75759

El método blend_node` añade un nuevo parámetro opcional test_only

✔️

|✔️ compatible|

✔️

GH-75759

AnimationNodeStateMachinePlayback

El método get_travel_path cambia el tipo retornado de PackedStringArray a Array[StringName]

✔️

GH-76418

Nodos 2D

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

PathFollow2D

La propiedad lookahead fue eliminada

GH-72842

Nodos 3D

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

Geometry3D

El método segment_intersects_convex cambia el tipo de parámetro planes de Array no tipado a Array[Plane]

✔️

|✔️ compatible|

GH-76418

MeshInstance3D

El método create_multiple_convex_collisions añade un nuevo parámetro opcional settings

✔️

|✔️ compatible|

✔️

GH-72152

Node3D

El método look_at añade un nuevo parámetro opcional use_model_front

✔️

|✔️ compatible|

✔️

GH-76082

El método look_at_from_position añade un nuevo parámetro opcional use_model_front

✔️

|✔️ compatible|

✔️

GH-76082

Nodos GUI

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

CodeEdit

El método add_code_completion_option añade un nuevo parámetro opcional location

✔️

|✔️ compatible|

✔️

GH-75746

RichTextLabel

El método push_list añade un nuevo parámetro opcional bullet

✔️

|✔️ compatible|

✔️

GH-75017

El método push_paragraph añade un nuevo parámetro opcional justification_flags

✔️

|✔️ compatible|

✔️

GH-75250

El método push_paragraph añade un nuevo parámetro opcional tab_stops

✔️

|✔️ compatible|

✔️

GH-76401

Árbol

El método edit_selected añade un nuevo parámetro opcional force_edit

✔️

|✔️ compatible|

✔️

GH-76794

Física

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

Area2D

La propiedad priority cambia el tipo de float a int

GH-72749

Area3D

La propiedad priority cambia el tipo de float a int

GH-72749

PhysicsDirectSpaceState2D

El método collide_shape cambia el tipo retornado de Array[PackedVector2Array] a Array[Vector2]

GH-75260

PhysicsDirectSpaceState3D

El método collide_shape cambia el tipo retornado de Array[PackedVector3Array] a Array[Vector3]

GH-75260

Renderización

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

RDShaderFile

El método get_version_list cambia el tipo retornado de PackedStringArray a Array[StringName]

✔️

GH-76418

RenderingDevice

El método draw_list_begin cambia el tipo de parámetro storage_textures de Array no tipado a Array[RID]

✔️

|✔️ compatible|

GH-76418

RenderingServer

El método global_shader_parameter_get_list cambia el tipo retornado de PackedStringArray a Array[StringName]

✔️

GH-76418

SurfaceTool

El método add_triangle_fan cambia el tipo del parámetro tangents de Array sin tipo a Array[Plane]

✔️

|✔️ compatible|

GH-76418

Redes

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

WebRTCPeerConnectionExtension

El método _create_data_channel cambia el tipo de retorno de Object a WebRTCDataChannel

✔️

✔️

GH-78237

Plugins del editor

Cambio

Compatibilidad con GDScript

Compatible con binarios C#

Compatible con código fuente C#

Introducido

AnimationTrackEditPlugin

Se eliminó el tipo AnimationTrackEditPlugin

GH-76413

EditorInterface

El tipo EditorInterface cambia la herencia de Node a Object

✔️

GH-76176

El método set_movie_maker_enabled se reemplaza con la propiedad movie_maker_enabled

✔️

GH-76176

Método is_movie_maker_enabled reemplazado por la propiedad movie_maker_enabled

✔️

GH-76176

EditorResourcePreviewGenerator

El método _generate agrega un nuevo parámetro metadata

GH-64628

El método _generate_from_path agrega un nuevo parámetro metadata

GH-64628

EditorUndoRedoManager

El método create_action añade un nuevo parámetro opcional backward_undo_ops

✔️

|✔️ compatible|

✔️

GH-76688

Cambios de comportamiento

En la versión 4.1 algunos cambios de comportamiento han sido introducidos, los cuales podrían requerir que ajustes tu proyecto.

Cambio

Introducido

SubViewportContainer

Cuando los eventos de entrada deberían alcanzar SubViewports y a sus hijos, SubViewportContainer.mouse_filter ahora necesita ser MOUSE_FILTER_STOP o MOUSE_FILTER_PASS. Vea GH-79271 para más detalles.

GH-57894

Los nodos de múltiples capas SubViewportContainer, que deberían todos recibir eventos de entrada desde el mouse, ahora necesitan ser reemplazados por nodos Area2D. Vea GH-79128 para más detalles.

GH-57894

Viewport

Los nodos Viewport, que tienen activado la opción Physics Picking, ahora automáticamente configuran InputEvents como gestionados. Vea GH-79897 para soluciones alternativas.

GH-77595

Actualizando su GDExtension para la versión 4.1

GDExtension está aún en beta. Hasta que esté marcado como estable, la compatibilidad puede romperse cuando actualiza a nueva versión menor de Godot.

Para corregir un error grave, en Godot 4.1 tuvimos que romper la compatibilidad binaria en gran medida y la compatibilidad de origen en pequeña medida.

Esto significa que las GDExtensions creadas para Godot 4.0 deberán recompilarse para Godot 4.1 (usando la rama 4.1 de godot-cpp), con un pequeño cambio a su código fuente.

En Godot 4.0, su función "entry_symbol" se ve algo así:

GDExtensionBool GDE_EXPORT example_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
    godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);

    init_obj.register_initializer(initialize_example_module);
    init_obj.register_terminator(uninitialize_example_module);
    init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);

    return init_obj.init();
}

Sin embargo, para Godot 4.1, debería verse como:

GDExtensionBool GDE_EXPORT example_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
    godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);

    init_obj.register_initializer(initialize_example_module);
    init_obj.register_terminator(uninitialize_example_module);
    init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);

    return init_obj.init();
}

Hay dos pequeños cambios:

  1. El primer argumento cambia de const GDExtensionInterface *p_interface a GDExtensionInterfaceGetProcAddress p_get_proc_address

  2. El constructor para la variable init_obj ahora recibe p_get_proc_address como primer parámetro

También necesitas agregar una línea extra de compatibility_minimum a tu archivo .gdextension, para que se vea algo así:

[configuration]

entry_symbol = "example_library_init"
compatibility_minimum = 4.1

Esto le permite a Godot saber que su GDExtension ha sido actualizada y que es seguro cargarla en Godot 4.1.