@GDScript

Constantes, funciones y anotaciones de GDScript integradas.

Descripción

Una lista de funciones de utilidad y anotaciones específicas de GDScript, accesibles desde cualquier script escrito en GDScript.

Para obtener la lista de funciones globales y constantes a las que se puede acceder desde cualquier lenguaje de scripting, Véase @GlobalScope.

Tutoriales

Métodos

Color

Color8(r8: int, g8: int, b8: int, a8: int = 255)

void

assert(condition: bool, message: String = "")

String

char(code: int)

Variant

convert(what: Variant, type: Variant.Type)

Object

dict_to_inst(dictionary: Dictionary)

Array

get_stack()

Dictionary

inst_to_dict(instance: Object)

bool

is_instance_of(value: Variant, type: Variant)

int

len(var: Variant)

Resource

load(path: String)

int

ord(char: String)

Resource

preload(path: String)

void

print_debug(...) vararg

void

print_stack()

Array

range(...) vararg

bool

type_exists(type: StringName)


Constantes

PI = 3.14159265358979 🔗

Constante que representa cuántas veces el diámetro de un círculo se encuentra contenido en su perímetro.Esto equivale a TAU / 2, o 180 grados en rotación.

TAU = 6.28318530717959 🔗

La constante del círculo, la circunferencia de la unidad círculo en radianes. Esto equivale a PI * 2 o 360 grados en rotación.

INF = inf 🔗

Infinito positivo de punto flotante. Este es el resultado de la división de punto flotante cuando el divisor es 0.0. Para infinito negativo, usa -INF. Dividir por -0.0 resultará en infinito negativo si el numerador es positivo, por lo que dividir por 0.0 no es lo mismo que dividir por -0.0 (a pesar de que 0.0 == -0.0 devuelve true).

Advertencia: El infinito numérico es solo un concepto aplicable a los números de punto flotante y no tiene equivalente para los enteros. Dividir un número entero entre 0 no resultará en INF y causará un error en tiempo de ejecución en su lugar.

NAN = nan 🔗

"No es un Número", un valor de punto flotante inválido. Es devuelto por algunas operaciones inválidas, como dividir 0.0 de punto flotante entre 0.0.

NAN tiene propiedades especiales, incluyendo que != siempre devuelve true, mientras que los demás operadores de comparación siempre devuelven false. Esto es cierto incluso al compararlo consigo mismo (NAN == NAN devuelve false y NAN != NAN devuelve true).

Advertencia: "No es un Número" es solo un concepto aplicable a los números de punto flotante y no tiene equivalente para los enteros. Dividir un entero 0 entre 0 no resultará en NAN y causará un error en tiempo de ejecución en su lugar.


Anotaciones

@abstract() 🔗

Marca una clase o un método como abstracto.

Una clase abstracta es una clase que no puede ser instanciada directamente. En cambio, está hecha para ser heredada por otras clases. Intentar instanciar una clase abstracta resultará en un error.

Un método abstracto es un método que no tiene implementación. De esa manera, una nueva línea o punto y coma se espera después de la cabeza de la función. Esto define un contrato al que las clases herederas deben ceñirse, porque la firma del método debe ser compatible al sobrescribir.

Las clases herederas deben proveer implementaciones para todos los métodos abstractos, o marcarse como abstractas también. Si una clase tiene al menos un método abstracto (o suyo propio o uno heredado no implementado), entonces debe ser marcado como abstracto también. Sin embargo, lo contrario no es verdad: una clase abstracta puede no tener métodos abstractos.

@abstract class Shape:
    @abstract func draw()

class Circle extends Shape:
    func draw():
        print("Dibujando un círculo.")

class Square extends Shape:
    func draw():
        print("Dibujando un cuadrado.")

@export() 🔗

Marca la siguiente propiedad como exportada (editable en el panel Inspector y guardada en disco). Para controlar el tipo de la propiedad exportada, utiliza la notación de sugerencia de tipo.

extends Node

enum Direction {LEFT, RIGHT, UP, DOWN}

# Tipos integrados.
@export var string = ""
@export var int_number = 5
@export var float_number: float = 5

# Enumeraciones.
@export var type: Variant.Type
@export var format: Image.Format
@export var direction: Direction

# Recursos.
@export var image: Image
@export var custom_resource: CustomResource

# Nodos.
@export var node: Node
@export var custom_node: CustomNode

# Arrays tipados.
@export var int_array: Array[int]
@export var direction_array: Array[Direction]
@export var image_array: Array[Image]
@export var node_array: Array[Node]

Nota: Los recursos y nodos personalizados deben registrarse como clases globales utilizando class_name, ya que el Inspector actualmente solo admite clases globales. De lo contrario, se exportará un tipo menos específico.

Nota: La exportación de nodos solo está soportada en clases derivadas de Node y tiene varias limitaciones adicionales.


@export_category(name: String) 🔗

Define una nueva categoría para las siguientes propiedades exportadas. Esto ayuda a organizar propiedades en el panel de inspección.

Véase también @GlobalScope.PROPERTY_USAGE_CATEGORY.

@export_category("Statistics")
@export var hp = 30
@export var speed = 1.25

Nota: Las categorías en la lista del panel de inspección usualmente dividen las propiedades provenientes de diferentes clases (Node, Node2D, Sprite, etc) . Para una mejor claridad, se recomienda usar en su lugar @export_group y @export_subgroup.


@export_color_no_alpha() 🔗

Exporta una propiedad de tipo Color, Array[Color] o PackedColorArray sin permitir que se edite su transparencia (Color.a).

Véase también @GlobalScope.PROPERTY_HINT_COLOR_NO_ALPHA.

@export_color_no_alpha var dye_color: Color
@export_color_no_alpha var dye_colors: Array[Color]

@export_custom(hint: PropertyHint, hint_string: String, usage: BitField[PropertyUsageFlags] = 6) 🔗

Te permite establecer una sugerencia personalizada, una string de sugerencia y banderas de uso para la propiedad exportada. Ten en cuenta que no se realiza ninguna validación en GDScript, simplemente se pasarán los parámetros al editor.

@export_custom(PROPERTY_HINT_NONE, "suffix:m") var suffix: Vector3

Nota: Independientemente del valor de usage, siempre se agrega la bandera @GlobalScope.PROPERTY_USAGE_SCRIPT_VARIABLE, como ocurre con cualquier variable de script declarada explícitamente.


@export_dir() 🔗

Exporta una propiedad de tipo String, Array[String] o PackedStringArray como una ruta hacia un directorio. La ruta estará limitada a la carpeta del proyecto y sus subcarpetas. Véase @export_global_dir para permitir seleccionar desde todo el sistema de archivos.

Véase también @GlobalScope.PROPERTY_HINT_DIR.

@export_dir var sprite_folder_path: String
@export_dir var sprite_folder_paths: Array[String]

@export_enum(names: String, ...) vararg 🔗

Exporta una propiedad int, String, Array[int], Array[String], PackedByteArray, PackedInt32Array, PackedInt64Array, o PackedStringArray como una lista enumerada de opciones (o un array de opciones). Si la propiedad es un int, entonces se guarda el índice del valor en el mismo orden en el que se proporcionan los valores. Se pueden añadir valores explícitos usando dos puntos (:). Si la propiedad es una String, entonces se guarda el valor.

Véase también @GlobalScope.PROPERTY_HINT_ENUM.

@export_enum("Warrior", "Magician", "Thief") var character_class: int
@export_enum("Slow:30", "Average:60", "Very Fast:200") var character_speed: int
@export_enum("Rebecca", "Mary", "Leah") var character_name: String

@export_enum("Sword", "Spear", "Mace") var character_items: Array[int]
@export_enum("double_jump", "climb", "dash") var character_skills: Array[String]

Si queres asignar un valor inicial, lo debes especificar explícitamente:

@export_enum("Rebecca", "Mary", "Leah") var character_name: String = "Rebecca"

Si quieres usar enums de GDSCript con nombre, entonces en cambio usa @export:

enum CharacterName {REBECCA, MARY, LEAH}
@export var character_name: CharacterName

enum CharacterItem {SWORD, SPEAR, MACE}
@export var character_items: Array[CharacterItem]

@export_exp_easing(hints: String = "", ...) vararg 🔗

Exporta una propiedad de punto flotante con un widget de editor suavizado. Se pueden añadir pistas adicionales para ajustar el comportamiento del widget. "attenuation" invierte la curva, lo cual lo hace más intuitivo para editar las propiedades de atenuación. "positive_only" limita los valores para que sólo sean iguales o mayores que cero.

Véase además @GlobalScope.PROPERTY_HINT_EXP_EASING.

@export_exp_easing var transition_speed
@export_exp_easing("attenuation") var fading_attenuation
@export_exp_easing("positive_only") var effect_power
@export_exp_easing var speeds: Array[float]

@export_file(filter: String = "", ...) vararg 🔗

Exporta una propiedad String, Array[String] o PackedStringArray como una ruta a un archivo. La ruta se limitará a la carpeta del proyecto y sus subcarpetas. Véase @export_global_file para permitir la selección de todo el sistema de archivos.

Si se proporciona filter, solo estarán disponibles para la selección los archivos coincidentes.

Véase también @GlobalScope.PROPERTY_HINT_FILE.

@export_file var sound_effect_path: String
@export_file("*.txt") var notes_path: String
@export_file var level_paths: Array[String]

Nota: El archivo se almacenará y se hará referencia a él como UID, si está disponible. Esto asegura que la referencia sea válida incluso cuando el archivo se mueve. Puede utilizar los métodos ResourceUID para convertirlo en ruta.


@export_file_path(filter: String = "", ...) vararg 🔗

Igual que @export_file, excepto que el archivo se guardará como una ruta sin procesar. Esto significa que puede volverse inválida cuando se mueva el archivo. Si está exportando una ruta de Resource, considera usar @export_file en su lugar.


@export_flags(names: String, ...) vararg 🔗

Exporta la propiedad de un entero como un campo de banderas de bits. Esto permite guardar varios valores "marcados" o true con una propiedad, y seleccionarlos cómodamente desde el panel del Inspector.

Véase también @GlobalScope.PROPERTY_HINT_FLAGS.

@export_flags("Fire", "Water", "Earth", "Wind") var spell_elements = 0

Puedes añadir valores explícitos utilizando dos puntos:

@export_flags("Self:4", "Allies:8", "Foes:16") var spell_targets = 0

Pueden incluso combinarse varias banderas:

@export_flags("Self:4", "Allies:8", "Self and Allies:12", "Foes:16")
var spell_targets = 0

Nota: El valor de una bandera debe ser al menos 1 y como máximo 2 ** 32 - 1.

Nota: A diferencia de @export_enum, el valor explícito anterior no está tomado en cuenta. En el siguiente ejemplo, A es 16, B es 2, C es 4.

@export_flags("A:16", "B", "C") var x

También puedes usar anotaciones con los tipos Array[int], PackedByteArray, PackedInt32Array, y PackedInt64Array

@export_flags("Fire", "Water", "Earth", "Wind") var phase_elements: Array[int]

@export_flags_2d_navigation() 🔗

Exporta una propiedad entera como una bandera binaria para las capas de navegación 2D. El widget en el panel de Inspector usará los nombres de capas definidos en ProjectSettings.layer_names/2d_navigation/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_2D_NAVIGATION.

@export_flags_2d_navigation var navigation_layers: int
@export_flags_2d_navigation var navigation_layers_array: Array[int]

@export_flags_2d_physics() 🔗

Exporta una propiedad de tipo int como un campo de bits para las capas físicas 2D. El widget en el panel del Inspector usará los nombres de capa definidos en ProjectSettings.layer_names/2d_physics/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_2D_PHYSICS.

@export_flags_2d_physics var physics_layers: int
@export_flags_2d_physics var physics_layers_array: Array[int]

@export_flags_2d_render() 🔗

Exporta un Integer como un campo de bandera de bit para las capas de renderizado 2D. El widget del inspector usará los nombres de capa definidos en ProjectSettings.layer_names/2d_render/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_2D_RENDER.

@export_flags_2d_render var render_layers: int
@export_flags_2d_render var render_layers_array: Array[int]

@export_flags_3d_navigation() 🔗

Exporta una propiedad de tipo Integer como un campo de bandera de bits para las capas de navegación 3D. El widget en el panel del inspector usará los nombres de las capas definidas en ProjectSettings.layer_names/3d_navigation/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_3D_NAVIGATION.

@export_flags_3d_navigation var navigation_layers: int
@export_flags_3d_navigation var navigation_layers_array: Array[int]

@export_flags_3d_physics() 🔗

Exporta una propiedad entera como un campo de bandera de bits para capas de física 3D. El widget del panel del Inspector usará los nombres de capa definidos en ProjectSettings.layer_names/3d_physics/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_3D_PHYSICS.

@export_flags_3d_physics var physics_layers: int
@export_flags_3d_physics var physics_layers_array: Array[int]

@export_flags_3d_render() 🔗

Exporta una propiedad de un numero entero como un campo de bandera de bits para capas de renderizado 3D. El widget en el panel del Inspector utilizará los nombres de capas definidos en ProjectSettings.layer_names/3d_render/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_3D_RENDER.

@export_flags_3d_render var render_layers: int
@export_flags_3d_render var render_layers_array: Array[int]

@export_flags_avoidance() 🔗

Exporta una propiedad de tipo Integer como un campo de bandera de bits para las capas de prevención de navegación. El widget en el Inspector usará los nombres de capas definidos en ProjectSettings.layer_names/avoidance/layer_1.

Véase también @GlobalScope.PROPERTY_HINT_LAYERS_AVOIDANCE.

@export_flags_avoidance var avoidance_layers: int
@export_flags_avoidance var avoidance_layers_array: Array[int]

@export_global_dir() 🔗

Exporta una propiedad String, Array [ String ], o PackedStringArray como una ruta absoluta a un directorio. La ruta puede ser tomada desde el Sistema de Archivos entero. Véase @export_dir para limitarlo a las carpetas del proyecto y a sus subcarpetas.

Véase también @GlobalScope.PROPERTY_HINT_GLOBAL_DIR.

@export_global_dir var sprite_folder_path: String
@export_global_dir var sprite_folder_paths: Array[String]

@export_global_file(filter: String = "", ...) vararg 🔗

Exporta una propiedad de tipo String, Array[String], o PackedStringArray como ruta absoluta a un archivo. La ruta puede ser tomada desde el Sistema de Archivos entero. Véase @export_file para limitarlo a las carpetas del proyecto y a sus subcarpetas.

Si se proporciona filter, sólo los archivos marcados estarán disponibles para la selección.

Véase también @GlobalScope.PROPERTY_HINT_GLOBAL_FILE.

@export_global_file var sound_effect_path: String
@export_global_file("*.txt") var notes_path: String
@export_global_file var multiple_paths: Array[String]

@export_group(name: String, prefix: String = "") 🔗

Define un nuevo grupo para las siguientes propiedades exportadas. Esto ayuda a organizar las propiedades en el panel Inspector. Los grupos pueden ser agregados con un prefix opcional, que podría hacer un grupo para solo considerar las propiedades que tenga este prefijo. El agrupamiento se romperá con la primera propiedad que no tenga un prefijo. El prefijo también sera removido del nombre de la propiedad en el panel Inspector.

Si no se proporciona un prefix, entonces cada propiedad siguiente sera agregada al grupo. El grupo se disuelve para cuando el grupo o categoría siguiente es definida. También puedes forzar la disolución de un grupo usando esta anotación con strings vacías como parámetros, @export_group("", "").

Los grupos no pueden ser anidados, usa @export_subgroup para añadir subgrupos dentro de grupos.

Véase también @GlobalScope.PROPERTY_USAGE_GROUP.

@export_group("Racer Properties")
@export var nickname = "Nick"
@export var age = 26

@export_group("Car Properties", "car_")
@export var car_label = "Speedy"
@export var car_number = 3

@export_group("", "")
@export var ungrouped_number = 3

@export_multiline(hint: String = "", ...) vararg 🔗

Export a String, Array[String], PackedStringArray, Dictionary or Array[Dictionary] property with a large TextEdit widget instead of a LineEdit. This adds support for multiline content and makes it easier to edit large amount of text stored in the property.

See also @GlobalScope.PROPERTY_HINT_MULTILINE_TEXT.

@export_multiline var character_biography
@export_multiline var npc_dialogs: Array[String]
@export_multiline("monospace", "no_wrap") var favorite_ascii_art: String

@export_node_path(type: String = "", ...) vararg 🔗

Exporta una propiedad NodePath o Array[NodePath] con un filtro para los tipos de nodo permitidos.

Véase también @GlobalScope.PROPERTY_HINT_NODE_PATH_VALID_TYPES.

@export_node_path("Button", "TouchScreenButton") var some_button
@export_node_path("Button", "TouchScreenButton") var many_buttons: Array[NodePath]

Note: El tipo debe de ser una clase nativa o un script registrado globalmente (usando la keyword de class_name ) que hereda de la clase Node.


@export_placeholder(placeholder: String) 🔗

Exporta una propiedad String, Array[String], or PackedStringArray con un texto genérico mostrado en el widget del editor cuando no hay valores presentes.

Véase también @GlobalScope.PROPERTY_HINT_PLACEHOLDER_TEXT.

@export_placeholder("Nombre en minúscula") var character_id: String
@export_placeholder("Nombre en minúscula") var friend_id: Array[String]

@export_range(min: float, max: float, step: float = 1.0, extra_hints: String = "", ...) vararg 🔗

Export an int, float, Array[int], Array[float], PackedByteArray, PackedInt32Array, PackedInt64Array, PackedFloat32Array, or PackedFloat64Array property as a range value. The range must be defined by min and max, as well as an optional step and a variety of extra hints. The step defaults to 1 for integer properties. For floating-point numbers this value depends on your EditorSettings.interface/inspector/default_float_step setting.

If hints "or_greater" and "or_less" are provided, the editor widget will not cap the value at range boundaries. The "exp" hint will make the edited values on range to change exponentially. The "prefer_slider" hint will make integer values use the slider instead of arrows for editing, while "hide_control" will hide the element controlling the value of the editor widget.

Hints also allow to indicate the units for the edited value. Using "radians_as_degrees" you can specify that the actual value is in radians, but should be displayed in degrees in the Inspector dock (the range values are also in degrees). "degrees" allows to add a degree sign as a unit suffix (the value is unchanged). Finally, a custom suffix can be provided using "suffix:unit", where "unit" can be any string.

See also @GlobalScope.PROPERTY_HINT_RANGE.

@export_range(0, 20) var number
@export_range(-10, 20) var number
@export_range(-10, 20, 0.2) var number: float
@export_range(0, 20) var numbers: Array[float]

@export_range(0, 100, 1, "or_greater") var power_percent
@export_range(0, 100, 1, "or_greater", "or_less") var health_delta

@export_range(-180, 180, 0.001, "radians_as_degrees") var angle_radians
@export_range(0, 360, 1, "degrees") var angle_degrees
@export_range(-8, 8, 2, "suffix:px") var target_offset

@export_storage() 🔗

Exporta una propiedad con la bandera @GlobalScope.PROPERTY_USAGE_STORAGE. La propiedad no se muestra en el editor, pero es serializada y almacenada en la escena o el archivo de recurso. Esto puede ser útil para los scripts @tool. Además, el valor de la propiedad es copiado cuando Resource.duplicate() o Node.duplicate() es llamado, a diferencia de las variables no-exportadas.

var a # No almacenado en el archivo, no se muestra en el editor.
@export_storage var b # Almacenado en el archivo, no se muestra en el editor.
@export var c: int # Almacenado en el archivo, se muestra en el editor.

@export_subgroup(name: String, prefix: String = "") 🔗

Define un nuevo subgrupo para las siguientes propiedades exportadas. Esto ayuda a organizar las propiedades en el dock Inspector. Los subgrupos funcionan exactamente como los grupos, excepto que necesitan que exista un grupo padre. Véase @export_group.

Véase también @GlobalScope.PROPERTY_USAGE_SUBGROUP.

@export_group("Racer Properties")
@export var nickname = "Nick"
@export var age = 26

@export_subgroup("Car Properties", "car_")
@export var car_label = "Speedy"
@export var car_number = 3

Nota: Los subgrupos no se pueden anidar, pero puedes usar el separador de barra (/) para lograr el efecto deseado:

@export_group("Car Properties")
@export_subgroup("Wheels", "wheel_")
@export_subgroup("Wheels/Front", "front_wheel_")
@export var front_wheel_strength = 10
@export var front_wheel_mobility = 5
@export_subgroup("Wheels/Rear", "rear_wheel_")
@export var rear_wheel_strength = 8
@export var rear_wheel_mobility = 3
@export_subgroup("Wheels", "wheel_")
@export var wheel_material: PhysicsMaterial

@export_tool_button(text: String, icon: String = "") 🔗

Exporta una propiedad Callable como un botón clickeable con la etiqueta text. Cuando se presiona el botón, se llama al Callable.

Si se especifica icon, este se utiliza para obtener un icono para el botón mediante Control.get_theme_icon(), del tipo de tema "EditorIcons". Si se omite icon, se usa el icono predeterminado "Callable".

Considera usar EditorUndoRedoManager para permitir que la acción pueda revertirse de manera segura.

Véase también @GlobalScope.PROPERTY_HINT_TOOL_BUTTON.

@tool
extends Sprite2D

@export_tool_button("Hello") var hello_action = hello
@export_tool_button("Randomize the color!", "ColorRect")
var randomize_color_action = randomize_color

func hello():
    print("Hello world!")

func randomize_color():
    var undo_redo = EditorInterface.get_editor_undo_redo()
    undo_redo.create_action("Randomized Sprite2D Color")
    undo_redo.add_do_property(self, &"self_modulate", Color(randf(), randf(), randf()))
    undo_redo.add_undo_property(self, &"self_modulate", self_modulate)
    undo_redo.commit_action()

Nota: La propiedad se exporta sin la bandera @GlobalScope.PROPERTY_USAGE_STORAGE porque un Callable no puede ser serializado ni almacenado adecuadamente en un archivo.

Nota: En un proyecto exportado, ni EditorInterface ni EditorUndoRedoManager existen, lo que puede hacer que algunos scripts fallen. Para evitar esto, puedes usar Engine.get_singleton() y omitir el tipo estático en la declaración de la variable:

var undo_redo = Engine.get_singleton(&"EditorInterface").get_editor_undo_redo()

Nota: Evita almacenar Callable tipo lambda en variables miembro de clases basadas en RefCounted (por ejemplo, recursos), ya que esto podría provocar fugas de memoria. Usa únicamente Callable de métodos y, si es necesario, utiliza los métodos Callable.bind() o Callable.unbind().


@icon(icon_path: String) 🔗

Añade un icono personalizado al script actual. El icono especificado en icon_path se muestra en el panel de la Escena por cada nodo de esa clase, así como en varios diálogos de edición.

@icon("res://path/to/class/icon.svg")

Nota: Solo el script puede tener un icono personalizado. Las clases internas no están soportadas.

Nota: Como las anotaciones describen su tema, la anotación @icon se debe poner antes de definir la clase y su herencia.

Nota: A diferencia de la mayoría de las otras anotaciones, el argumento de la anotación @icon debe ser un literal de string (las expresiones constantes no están soportadas).


@onready() 🔗

Marca la siguiente propiedad como asignada cuando el Node esté listo. Los valores para esas propiedades no son asignadas inmediatamente cuando el nodo (Object._init()) es inicializado, y en su lugar son computadas y almacenadas justo antes de Node._ready().

@onready var character_name: Label = $Label

@rpc(mode: String = "authority", sync: String = "call_remote", transfer_mode: String = "reliable", transfer_channel: int = 0) 🔗

Mark the following method for remote procedure calls. See High-level multiplayer.

If mode is set as "any_peer", allows any peer to call this RPC function. Otherwise, only the authority peer is allowed to call it and mode should be kept as "authority". When configuring functions as RPCs with Node.rpc_config(), each of these modes respectively corresponds to the MultiplayerAPI.RPC_MODE_AUTHORITY and MultiplayerAPI.RPC_MODE_ANY_PEER RPC modes. See RPCMode. If a peer that is not the authority tries to call a function that is only allowed for the authority, the function will not be executed. If the error can be detected locally (when the RPC configuration is consistent between the local and the remote peer), an error message will be displayed on the sender peer. Otherwise, the remote peer will detect the error and print an error there.

If sync is set as "call_remote", the function will only be executed on the remote peer, but not locally. To run this function locally too, set sync to "call_local". When configuring functions as RPCs with Node.rpc_config(), this is equivalent to setting call_local to true.

The transfer_mode accepted values are "unreliable", "unreliable_ordered", or "reliable". It sets the transfer mode of the underlying MultiplayerPeer. See MultiplayerPeer.transfer_mode.

The transfer_channel defines the channel of the underlying MultiplayerPeer. See MultiplayerPeer.transfer_channel.

The order of mode, sync and transfer_mode does not matter, but values related to the same argument must not be used more than once. transfer_channel always has to be the 4th argument (you must specify 3 preceding arguments).

@rpc
func fn(): pass

@rpc("any_peer", "unreliable_ordered")
func fn_update_pos(): pass

@rpc("authority", "call_remote", "reliable", 0) # Equivalent to @rpc
func fn_default(): pass

Note: Methods annotated with @rpc cannot receive objects which define required parameters in Object._init(). See Object._init() for more details.


@static_unload() 🔗

Crea un script con variables estáticas que no persistan después de que se pierdan todas las referencias. Si el script se carga nuevamente, las variables estáticas volverán a sus valores predeterminados.

Nota: Como las anotaciones describen su subject, la anotación @static_unload debe colocarse antes de la definición de clase y la herencia.

Advertencia: Actualmente, debido a un error, los scripts nunca se liberan, incluso si se usa la anotación @static_unload.


@tool() 🔗

Marca el script actual como una herramienta de script, permitiéndole ser cargado y ejecutado por el editor. Véase Ejecutar código en el editor.

@tool
extends Node

Nota: Como las anotaciones describen sus sujetos, la @tooldebe ser colocada antes de la definición de clase y herencia.


@warning_ignore(warning: String, ...) vararg 🔗

Marca la siguiente declaración para ignorar el warning especificado. Véase GDScript warning system.

. . . .func test():
. . . .print("hola")
. . . .return
. . . .@warning_ignore("unreachable_code")
print("unreachable")

Véase también @warning_ignore_start y @warning_ignore_restore.


@warning_ignore_restore(warning: String, ...) vararg 🔗

Deja de ignorar los tipos de advertencia enumerados después de @warning_ignore_start. Al ignorar los tipos de advertencia especificados, se restablecerá la configuración del proyecto. Esta anotación se puede omitir para ignorar los tipos de advertencia hasta el final del archivo.

Nota: A diferencia de la mayoría de las demás anotaciones, los argumentos de la anotación @warning_ignore_restore deben ser literales de string (no se admiten expresiones constantes).


@warning_ignore_start(warning: String, ...) vararg 🔗

Comienza a ignorar los tipos de advertencias enumerados hasta el final del archivo o hasta la anotación @warning_ignore_restore con el tipo de advertencia especificado.

func test():
    var a = 1 # Advertencia (si está habilitada en la Configuración del Proyecto).
    @warning_ignore_start("unused_variable")
    var b = 2 # Sin advertencia.
    var c = 3 # Sin advertencia.
    @warning_ignore_restore("unused_variable")
    var d = 4 # Advertencia (si está habilitada en la Configuración del Proyecto).

Nota: Para suprimir una sola advertencia, utiliza @warning_ignore en su lugar.

Nota: A diferencia de la mayoría de otras anotaciones, los argumentos de la anotación @warning_ignore_start deben ser literales de string (las expresiones constantes no son compatibles).


Descripciones de Métodos

Color Color8(r8: int, g8: int, b8: int, a8: int = 255) 🔗

Obsoleto: Use Color.from_rgba8() instead.

Devuelve un Color construido a partir de rojo (r8), verde (g8), azul (b8) y opcionalmente alfa (a8), cada uno dividido entre 255.0 para obtener su valor final. Usar Color8() en vez del constructor estándar Color es útil cuando se necesita hacer coincidir exactamente los valores de color en una Image.

var red = Color8(255, 0, 0)            # Igual que Color(1, 0, 0)
var dark_blue = Color8(0, 0, 51)       # Igual que Color(0, 0, 0.2).
var my_color = Color8(306, 255, 0, 102) # Igual que Color(1.2, 1, 0, 0.4).

Nota: Debido a la baja precisión de Color8() comparada con la del constructor estándar Color, un color creado con Color8() generalmente no será igual al mismo color creado con el constructor Color estándar. Utiliza Color.is_equal_approx() para hacer comparaciones y evitar problemas con errores de precisión de punto flotante.


void assert(condition: bool, message: String = "") 🔗

Verifica que la condition sea true. Si la condition es false, se genera un error. Al ejecutar desde el editor, el proyecto en ejecución también se pausará hasta que lo reanudes. Esto puede usarse como una forma más estricta de @GlobalScope.push_error() para reportar errores a los desarrolladores del proyecto o a los usuarios de plugins.

Un mensaje opcional message puede mostrarse además del mensaje genérico "Assertion failed". Puedes usar esto para proporcionar detalles adicionales sobre por qué falló la aserción.

Advertencia: Por razones de rendimiento, el código dentro de assert() solo se ejecuta en versiones de depuración o al ejecutar el proyecto desde el editor. No incluyas código con efectos secundarios en una llamada a assert(). De lo contrario, el proyecto se comportará de manera diferente cuando se exporte en modo de lanzamiento.

Imagina que siempre queremos que la velocidad esté entre 0 y 20.
var speed = -10
assert(speed < 20) # Verdadero, el programa continuará.
assert(speed >= 0) # Falso, el programa se detendrá.
assert(speed >= 0 and speed < 20) # También puedes combinar las dos condiciones en una sola verificación.
assert(speed < 20, "el límite de velocidad es 20") # Muestra un mensaje.

Nota: assert() es una palabra clave, no una función. Por lo tanto, no puedes acceder a ella como un Callable ni usarla dentro de expresiones.


String char(code: int) 🔗

Devuelve un único carácter (como un String de longitud 1) del punto de código Unicode code dado.

print(char(65))     # Imprime "A"
print(char(129302)) # Imprime "🤖" (emoji de cara de robot)

Esta es la inversa de ord(). Véase también String.chr() y String.unicode_at().


Variant convert(what: Variant, type: Variant.Type) 🔗

Obsoleto: Use @GlobalScope.type_convert() instead.

Convierte what a type de la mejor forma posible. El type usa los valores de Variant.Type.

var a = [4, 2.5, 1.2]
print(a is Array) # Imprime true

var b = convert(a, TYPE_PACKED_BYTE_ARRAY)
print(b)          # Imprime [4, 2, 1]
print(b is Array) # Imprime false

Object dict_to_inst(dictionary: Dictionary) 🔗

Obsoleto: Consider using JSON.to_native() or Object.get_property_list() instead.

Convierte un dictionary (creado con inst_to_dict()) en una instancia de objeto. Puede ser útil para deserializar datos.


Array get_stack() 🔗

Devuelve un array de diccionarios que representan la pila de llamadas actual.

func _ready():
    foo()

func foo():
    bar()

func bar():
    print(get_stack())

Empezando desde _ready(), bar() esto imprimirá:

[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]

Véase también print_debug(), print_stack() y Engine.capture_script_backtraces().

Nota: Por defecto, los "backtraces" solo están disponibles en compilaciones de editor y compilaciones de depuración. Para habilitarlos también para compilaciones de lanzamiento, debes habilitar ProjectSettings.debug/settings/gdscript/always_track_call_stacks.


Dictionary inst_to_dict(instance: Object) 🔗

Obsoleto: Consider using JSON.from_native() or Object.get_property_list() instead.

Devuelve la instancia instance convertida a un Dictionary. Puede ser útil para la serialización.

var foo = "bar"
func _ready():
    var d = inst_to_dict(self)
    print(d.keys())
    print(d.values())

Imprime:

[@subpath, @path, foo]
[, res://test.gd, bar]

Nota: Esta función sólo se puede utilizar para serializar objetos con un GDScript adjunto almacenado en un archivo independiente. No están soportados objetos sin un script adjunto, con un script escrito en otro lenguaje o con un script integrado.

Nota: Esta función no es recursiva, lo que significa que los objetos anidados no se representarán como diccionarios. Además, las propiedades pasadas por referencia (Object, Dictionary, Array y arrays empaquetados) se copian por referencia, no duplicadas.


bool is_instance_of(value: Variant, type: Variant) 🔗

Devuelve true si value es una instancia de type. El valor de type debe ser uno de los siguientes:

A diferencia del operando derecho del operador is, type puede ser un valor no constante. El operador is admite más características (como arrays tipados). Usa el operador en lugar de este método si no necesitas comprobación dinámica de tipos.

Ejemplos:

print(is_instance_of(a, TYPE_INT))
print(is_instance_of(a, Node))
print(is_instance_of(a, MyClass))
print(is_instance_of(a, MyClass.InnerClass))

Nota: Si value y/o type son objetos liberados (ver @GlobalScope.is_instance_valid()), o type no es una de las opciones anteriores, este método generará un error en tiempo de ejecución.

Véase también @GlobalScope.typeof(), type_exists(), Array.is_same_typed() (y otros métodos de Array).


int len(var: Variant) 🔗

Devuelve la longitud del var Variant dado. La longitud puede ser el recuento de caracteres de un String o StringName, el recuento de elementos de cualquier tipo de array, o el tamaño de un Dictionary. Para cualquier otro tipo de Variant, se genera un error en tiempo de ejecución y se detiene la ejecución.

var a = [1, 2, 3, 4]
len(a) # Devuelve 4

var b = "¡Hola!"
len(b) # Devuelve 6

Resource load(path: String) 🔗

Devuelve un Resource del sistema de archivos ubicado en la ruta absoluta path. A menos que ya esté referenciado en otro lugar (como en otro script o en la escena), el recurso se carga desde el disco en la llamada a la función, lo que podría causar un ligero retraso, especialmente al cargar escenas grandes. Para evitar retrasos innecesarios al cargar algo varias veces, almacena el recurso en una variable o usa preload(). Este método es equivalente a usar ResourceLoader.load() con ResourceLoader.CACHE_MODE_REUSE.

Nota: Las rutas de los recursos se pueden obtener haciendo clic derecho sobre un recurso en el panel FileSystem y eligiendo "Copiar ruta", o arrastrando el archivo desde el panel FileSystem al script actual.

# Carga una escena llamada "main" ubicada en la raíz del directorio del proyecto y la almacena en una variable.
var main = load("res://main.tscn") # main contendrá un recurso PackedScene.

Importante: Las rutas relativas no son relativas al script que llama a este método, sino que están prefijadas con "res://". Cargar desde rutas relativas puede no funcionar como se espera.

Esta función es una versión simplificada de ResourceLoader.load(), que puede usarse para escenarios más avanzados.

Nota: Los archivos deben importarse primero en el motor para poder cargarlos usando esta función. Si deseas cargar Images en tiempo de ejecución, puedes usar Image.load(). Si deseas importar archivos de audio, puedes usar el fragmento descrito en AudioStreamMP3.data.

Nota: Si ProjectSettings.editor/export/convert_text_resources_to_binary está configurado como true, load() no podrá leer los archivos convertidos en un proyecto exportado. Si dependes de la carga en tiempo de ejecución de archivos presentes dentro del PCK, configura ProjectSettings.editor/export/convert_text_resources_to_binary como false.


int ord(char: String) 🔗

Devuelve un entero que representa el punto de código Unicode del carácter char dado, que debe ser una string de longitud 1.

print(ord("A")) # Imprime 65
print(ord("🤖")) # Imprime 129302

Esta es la inversa de char(). Véase también String.chr() y String.unicode_at().


Resource preload(path: String) 🔗

Devuelve un Resource del sistema de archivos ubicado en la ruta path. En tiempo de ejecución, el recurso se carga durante el análisis sintáctico del script. Esta función efectivamente actúa como una referencia a ese recurso. Ten en cuenta que el método requiere que path sea una constante String. Si deseas cargar un recurso de una ruta dinámica/variable, utiliza load().

Nota: Las rutas de los recursos se pueden obtener haciendo clic con el botón derecho del ratón en un recurso del panel FileSystem y eligiendo "Copiar Ruta" o arrastrando el archivo desde el panel al script.

# Crea la instancia de una escena.
var diamante = preload("res://diamante.tscn").instantiate()

Nota: preload() es una palabra reservada, no una función. Por lo que no la puedes usar como una Callable.


void print_debug(...) vararg 🔗

Similar a @GlobalScope.print(), pero incluye el marco de pila actual cuando se ejecuta con el depurador activado.

La salida en la consola puede verse así:

Test print
At: res://test.gd:15:_process()

Véase también print_stack(), get_stack() y Engine.capture_script_backtraces().

Nota: De forma predeterminada, los "backtraces" solo están disponibles en compilaciones de editor y compilaciones de depuración. Para habilitarlos también para compilaciones de lanzamiento, debes habilitar ProjectSettings.debug/settings/gdscript/always_track_call_stacks.


void print_stack() 🔗

Imprime un stack trace en la ubicación actual del código.

La salida en la consola puede verse de la siguiente manera:

Frame 0 - res://test.gd:16 in function '_process'

Véase también print_debug(), get_stack() y Engine.capture_script_backtraces().

Nota: Por defecto, los backtraces solo están disponibles en las compilaciones del editor y compilaciones de depuración. Para habilitarlos también en las compilaciones de lanzamiento, debes activar ProjectSettings.debug/settings/gdscript/always_track_call_stacks.


Array range(...) vararg 🔗

Devuelve un array con el rango indicado. El range() se puede llamar de tres maneras:

range(n: int): Comienza desde 0, aumenta en pasos de 1 y se detiene antes de n. El argumento n es exclusivo.

range(b: int, n: int): Comienza desde b, aumenta en pasos de 1 y se detiene antes de n. Los argumentos b y n son inclusivos y exclusivos, respectivamente.

range(b: int, n: int, s: int): Comienza en b, aumenta/disminuye en pasos de s y se detiene antes de n. Los argumentos b y n son inclusivos y exclusivos, respectivamente. El argumento s puede ser negativo, pero no 0. Si s es 0, se muestra un mensaje de error.

range() convierte todos los argumentos a int antes del procesamiento.

Nota: Devuelve un array vacío si ningún valor cumple la restricción de valor (p. ej., range(2, 5, -1) o range(5, 5, 1)).

Ejemplos:

print(range(4))        # Imprime [0, 1, 2, 3]
print(range(2, 5))     # Imprime [2, 3, 4]
print(range(0, 6, 2))  # Imprime [0, 2, 4]
print(range(4, 1, -1)) # Imprime [4, 3, 2]

Para iterar sobre un Array hacia atrás, use:

var array = [3, 6, 9]
for i in range(array.size() - 1, -1, -1):
    print(array[i])

Resultado:

9
6
3

Para iterar sobre float, conviértelos en el bucle.

for i in range(3, 0, -1):
    print(i / 10.0)

Salida:

0.3
0.2
0.1

bool type_exists(type: StringName) 🔗

Devuelve `` true `` si la clase dada existe en ClassDB.

type_exists("Sprite2D") # Devuelve true
type_exists("Variant") # Devuelve false