Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

@GDScript

Costanti, funzioni e annotazioni di GDScript integrate.

Descrizione

Una lista di funzioni di utilità e annotazioni, accessibili da qualsiasi script scritto in GDScript.

Per la lista di funzioni e costanti globali vedi @GlobalScope.

Tutorial

Metodi

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)


Costanti

PI = 3.14159265358979 🔗

Constante che rappresenta quante volte il diametro di un cerchio rientra attorno al suo perimetro. Questo è equivalente a TAU / 2, o 180 gradi di rotazione.

TAU = 6.28318530717959 🔗

La costante del cerchio, la circonferenza del cerchio di raggio unitario in radianti (Circonferenza = Pi * diametro). È equivalente a PI * 2, o a 360 gradi di rotazione.

INF = inf 🔗

L'infinità positiva rappresentata in virgola mobile. Questo è il risultato della divisione in virgola mobile quando il divisore è 0.0. Per infinità negativa, utilizza -INF. Dividere per -0.0 risulterà in infinità negativa se è il numeratore è positivo, quindi dividere per 0.0 non è lo stesso di dividere per -0.0 (nonostante 0.0 == -0.0 ritorni true).

Attenzione: L'infinità numerica è solo un concetto per numeri in virgola mobile, e non ha equivalenti per i numeri interi. Dividere un numero intero per 0 non produrrà INF ma risulterà in un errore durante l'esecuzione.

NAN = nan 🔗

"Not a Number", indica un valore in virgola mobile non valido. È restituito da alcune operazioni non valide, come la divisione in virgola mobile di 0.0 per 0.0.

NAN ha proprietà particolari, tra cui quella di restituire sempre true per l'operatore !=, e per gli altri operatori di uguaglianza restituisce sempre false . Ciò si applica anche nei confronti con se stesso (NAN == NAN restituisce false e NAN != NAN restituisce true). Per questo motivo, è necessario utilizzare @GlobalScope.is_nan() per verificare se un numero è uguale a NAN.

Attenzione: "Not a Number" è solo un concetto per numeri in virgola mobile, e non ha equivalenti per i numeri interi. Dividere uno 0 intero per 0 non produrrà NAN ma risulterà in un errore durante l'esecuzione.


Annotazioni

@abstract() 🔗

Contrassegna una classe come astratta.

Una classe astratta è una classe che non può essere istanziata direttamente. Si dovrebbe invece implementare da altre classi. Tentare di istanziare una classe astratta risulterà in un errore.

Un metodo astratto è un metodo che non ha implementazione. Perciò, è prevista una nuova riga o un punto e virgola dopo l'header della funzione. Ciò definisce un contratto al quale le classi ereditanti dovranno aderire, in quanto la firma del metodo deve essere compatibile durante l'override.

Le classi ereditanti devono fornire implementazioni per tutti i metodi astratti oppure essere contrassegnate come astratte. Se una classe ha almeno un metodo astratto (che sia il proprio, o uno ereditato ma non implementato), allora deve essere contrassegnata come astratta. Però, l'inverso non è vero: una classe astratta può non contenere alcun metodo astratto.

@abstract class Shape:
    @abstract func draw()

class Circle extends Shape:
    func draw():
        print("Disegnando un cerchio.")

class Square extends Shape:
    func draw():
        print("Disegnando un quadrato.")

@export() 🔗

Contrassegna la seguente proprietà come esportata (modificabile nel pannello dell'Ispettore e salvato su disco). Per controllare il tipo della proprietà esportata, utilizza la notazione di suggerimento per il tipo.

extends Node

enum Direction {LEFT, RIGHT, UP, DOWN}

# Tipi integrati.
@export var string = ""
@export var int_number = 5
@export var float_number: float = 5

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

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

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

# Array tipizzati.
@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: Le risorse e i nodi personalizzati devono essere registrati come classi globali attraverso class_name, poiché l'Ispettore attualmente supporta solo classi globali. Altrimenti, un tipo meno specifico sarà invece esportato.

Nota: L'esportazione di nodi è supportata solo nelle classi derivanti da Node e ha un certo numero di altre limitazioni.


@export_category(name: String) 🔗

Definisce una nuova categoria per le proprietà esportate seguenti. Questo aiuta a organizzare le proprietà nel pannello dell'ispettore.

Vedi anche @GlobalScope.PROPERTY_USAGE_CATEGORY.

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

Nota: Le categorie nella lista del pannello dell'ispettore di solito dividono le proprietà provenienti da diverse classi (Node, Node2D, Sprite, ecc.). Per una migliore chiarezza, si consiglia di usare @export_group e @export_subgroup, invece.


@export_color_no_alpha() 🔗

Esporta una proprietà di tipo Color, Array[Color], o PackedColorArray senza consentire la modifica della sua trasparenza (Color.a)).

Vedi anche @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) 🔗

Consente di impostare un'indicazione, una stringa indicativa e flag di utilizzo personalizzati per la proprietà esportata. Nota che non c'è alcuna validazione effettuata in GDScript, saranno solo passati i parametri all'editor.

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

Nota: A prescindere dal valore di usage, viene sempre aggiunto il flag @GlobalScope.PROPERTY_USAGE_SCRIPT_VARIABLE, come con qualsiasi variabile di script dichiarata esplicitamente.


@export_dir() 🔗

Esporta una proprietà di tipo String, Array[String], o PackedStringArray come un percorso per una cartella. Il percorso sarà limitato alla cartella del progetto e alle sue sottocartelle. Vedi @export_global_dir per consentire la scelta da tutto il filesystem.

Vedi anche @GlobalScope.PROPERTY_HINT_DIR.

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

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

Esporta una proprietà di tipo int, String, Array[], Array[String], PackedByteArray, PackedInt32Array, PackedInt64Array, o PackedStringArray come un elenco enumerato di opzioni (o un array di opzioni). Se la proprietà è un int, viene memorizzato l'indice del valore, nello stesso ordine che sono stati forniti i valori. È possibile aggiungere valori espliciti utilizzando i due punti. Se la proprietà è un String, il valore è memorizzato.

Vedi anche @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]

Se si desidera impostare un valore iniziale, è necessario specificarlo esplicitamente:

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

Se si desidera utilizzare le enumerazioni di GDScript con nome, utilizza invece @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 🔗

Esporta una proprietà in virgola mobile con un widget di editor di allentamento. È possibile fornire ulteriori indicazioni per regolare il comportamento del widget. "attenuation" capovolge la curva, il che lo rende più intuitivo per modificare le proprietà di attenuazione. "positive_only" limita i valori per essere maggiori o uguali a zero.

Vedi anche @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 🔗

Esporta una proprietà di tipo String, Array[String], o PackedStringArray come un percorso per un file. Il percorso sarà limitato alla cartella del progetto e alle sue sottocartelle. Vedi @export_global_file per consentire la scelta da tutto il filesystem.

Se filter è fornito, solo i file corrispondenti saranno disponibili per la raccolta.

Vedi anche @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: Il file sarà memorizzato e fatto riferimento come UID, se disponibile. Ciò garantisce che il riferimento sia valido anche quando il file viene spostato. È possibile utilizzare i metodi di ResourceUID per convertirlo in percorso.


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

Come @export_file, con la differenza che il file sarà memorizzato come percorso non elaborato. Ciò significa che potrebbe non essere più valido quando il file è spostato. Se è necessario esportare un percorso di una Resource, si consiglia invece di utilizzare @export_file.


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

Esporta una proprietà di intero come un campo di flag di bit. Questo consente di memorizzare diversi valori "spuntati" o true con una sola proprietà, e selezionarli comodamente dal pannello dell'ispettore.

Vedi anche @GlobalScope.PROPERTY_HINT_FLAGS.

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

Puoi aggiungere valori espliciti tramite i due punti:

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

Puoi anche combinare diversi flag:

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

Nota: Il valore di un flag deve essere almeno 1 e al massimo 2 ** 32 - 1.

Nota: A differenza di @export_enum, il valore esplicito precedente non è preso in considerazione. Nell'esempio seguente, A è 16, B è 2, C è 4.

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

Puoi anche usare l'annotazione sui tipi Array[int], PackedByteArray, PackedInt32Array, e PackedInt64Array

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

@export_flags_2d_navigation() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di navigazione 2D. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/2d_navigation/layer_1.

Vedi anche @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() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di fisica 2D. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/2d_physics/layer_1.

Vedi anche @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() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di rendering 2D. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/2d_physics/layer_1.

Vedi anche @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() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di navigazione 3D. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/3d_navigation/layer_1.

Vedi anche @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() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di fisica 3D. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/3d_physics/layer_1.

Vedi anche @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() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di rendering 3D. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/3d_physics/layer_1.

Vedi anche @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() 🔗

Esporta una proprietà di intero come un campo di flag di bit per gli strati di evasione. Il widget nel pannello dell'ispettore utilizzerà i nomi degli strati definiti in ProjectSettings.layer_names/avoidance/layer_1.

Vedi anche @GlobalScope.PROPERTY_HINT_LAYERS_AVOIDANCE.

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

@export_global_dir() 🔗

Esporta una proprietà di tipo String, Array[String], o PackedStringArray come un percorso assoluto per una cartella. Il percorso può essere scelto da tutto il filesystem. Vedi @export_dir per limitarlo alla cartella del progetto e alle sue sottocartelle.

Vedi anche @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 🔗

Esporta una proprietà di tipo String, Array[String], o PackedStringArray come un percorso assoluto per un file. Il percorso può essere scelto da tutto il filesystem. Vedi @export_dir per limitarlo alla cartella del progetto e alle sue sottocartelle.

Se filter è fornito, solo i file corrispondenti saranno disponibili per la scelta.

Vedi anche @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 = "") 🔗

Definisce un nuovo gruppo per le seguenti proprietà esportate. Questo aiuta a organizzare le proprietà nel pannello dell'ispettore. I gruppi possono essere aggiunti con un prefisso prefix opzionale, che include nel gruppo solo le proprietà che hanno questo prefisso. Il raggruppamento si romperà alla prima proprietà che non ha il prefisso. Il prefisso è anche rimosso dal nome della proprietà nel pannello dell'ispettore.

Se non viene fornito prefix, ogni proprietà seguente verrà aggiunta al gruppo. Il gruppo termina quando viene definito il prossimo gruppo o categoria. Puoi anche forzare la fine di un gruppo utilizzando questa annotazione con stringhe vuote per i parametri, @export_group("", "").

I gruppi non si possono annidare, utilizza @export_subgroup per aggiungere sottogruppi all'interno dei gruppi.

Vedi anche @GlobalScope.PROPERTY_USAGE_GROUP.

@export_group("Propertà di pilota")
@export var nickname = "Nick"
@export var age = 26

@export_group("Proprietà dell'auto", "car_")
@export var car_label = "Speedy"
@export var car_number = 3

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

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

Esporta una proprietà di tipo String, Array[String], PackedStringArray, Dictionary o Array[Dictionary] con un grande widget TextEdit anziché con un LineEdit. Ciò permette di supportare contenuti su più righe e semplifica la modifica di grandi quantità di testo memorizzate nella proprietà.

Vedi anche @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 🔗

Esporta una proprietà di tipo NodePath o Array[NodePath] con un filtro per i tipi di nodo consentiti.

Vedi anche @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]

Nota: Il tipo deve essere una classe nativa o uno script registrato globalmente (tramite la parola chiave class_name) che eredita Node.


@export_placeholder(placeholder: String) 🔗

Esporta una proprietà di tipo String, Array[String], o PackedStringArray con un testo segnaposto visualizzato nel widget dell'editor quando non è presente alcun valore.

Vedi anche @GlobalScope.PROPERTY_HINT_PLACEHOLDER_TEXT.

@export_placeholder("Name in lowercase") var character_id: String
@export_placeholder("Name in lowercase") var friend_ids: Array[String]

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

Esporta una proprietà di tipo int, float, Array[int], Array [float], PackedByteArray, PackedInt32Array, PackedInt64Array, PackedFloat32Array o PackedFloat64Array come valore tra un intervallo. L'intervallo deve essere definito da min e max, oltre che da un passo facoltativo (step) e da una serie di ulteriori indicazioni. Il valore predefinito di step è 1 per le proprietà di tipo intero. Per i numeri in virgola mobile, questo valore dipende dall'impostazione EditorSettings.interface/inspector/default_float_step.

Se vengono fornite le indicazioni "or_greater" e "or_less", il widget nell'editor non limiterà il valore ai confini dell'intervallo. L'indicazione "exp" consente di modificare i valori nell'intervallo in modo esponenziale. L'indicazione "prefer_slider" consente di modificare i valori di tipo intero tramite uno slider invece delle frecce, mentre "hide_control" nasconderà l'elemento che controlla il valore del widget nell'editor.

Le indicazioni consentono anche di indicare le unità di misura del valore modificato. Utilizzando "radians_as_degrees" è possibile specificare che il valore effettivo è in radianti, ma deve essere visualizzato in gradi nel pannello Ispettore (anche i valori dell'intervallo sono in gradi). "degrees" consente di aggiungere il simbolo dei gradi come suffisso dell'unità di misura (il valore rimane invariato). Infine, è possibile fornire un suffisso personalizzato utilizzando "suffix:unit", dove "unit" può essere qualsiasi stringa.

Vedi anche @GlobalScope.PROPERTY_HINT_RANGE.

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

@export_range(0, 100, 1, "or_greater") var energia_percentuale
@export_range(0, 100, 1, "or_greater","or_less") var vita_delta

@export_range(-180, 180, 0.001, "radians_as_degrees") var angolo_radianti
@export_range(0, 360, 1, "degrees") var angolo_gradi
@export_range(-8, 8, 2, "suffix:px") var offset_obiettivo

@export_storage() 🔗

Esporta una proprietà con il flag @GlobalScope.PROPERTY_USAGE_STORAGE. La proprietà non viene visualizzata nell'editor, ma è serializzata e memorizzata nella scena o nel file delle risorse. Questo può essere utile per @tool script. Inoltre, il valore della proprietà viene copiato quando Resource.duplicate() o Node.duplicate() è chiamato, a differenza di variabili non esportate.

var a # Non memorizzato nel file, non visualizzato nell'editor.
@export_storage var b # Memorizzato nel file, non visualizzato nell'editor.
@export var c: int # Memorizzato nel file, visualizzato nell'editor.

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

Definire un nuovo sottogruppo per le seguenti proprietà esportate. Questo aiuta a organizzare le proprietà nel pannello dell'ispettore. I sottogruppi funzionano esattamente come i gruppi, tranne che hanno bisogno di un gruppo genitore per esistere. Vedi @export_group.

Vedi anche @GlobalScope.PROPERTY_USAGE_SUBGROUP.

@export_group("Propertà del pilota")
@export var nickname = "Nick"
@export var age = 26

@export_subgroup("Proprietà dell'auto", "car_")
@export var car_label = "Speedy"
@export var car_number = 3

Nota: I sottogruppi non possono essere annidati, ma è possibile usare il separatore barra (/) per ottenere l'effetto desiderato:

@export_group("Proprietà dell'auto")
@export_subgroup("Ruote", "ruota_")
@export_subgroup("Ruote/Avanti", "ruota_avanti_")
@export var ruota_avanti_forza= 10
@export var ruota_avanti_mobilità = 5
@export_subgroup("Ruote/Dietro", "ruota_dietro_")
@export var ruota_dietro_forza = 8
@export var ruota_dietro_mobilità = 3
@export_subgroup("Ruota", "ruota_")
@export var ruota_materiale: PhysicsMaterial

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

Esporta una proprietà Callable come pulsante cliccabile con l'etichetta text. Quando il pulsante viene premuto, il chiamabile viene chiamato.

Se icon è specificato, viene utilizzato per recuperare un'icona per il pulsante tramite Control.get_theme_icon(), dal tipo del tema "EditorIcons". Se icon viene omesso, viene utilizzata l'icona predefinita "Callable".

Considera di usare EditorUndoRedoManager per prevedere l'annullamento sicuro dell'azione.

Vedi anche @GlobalScope.PROPERTY_HINT_TOOL_BUTTON.

@tool
extends Sprite2D

@export_tool_button("Ciao") var azione_ciao = ciao
@export_tool_button("Randomizza il colore!", "ColorRect")
var azione_randomizza_colore = randomizza_colore

func ciao():
    print("Ciao mondo!")

func randomizza_colore():
    var undo_redo = EditorInterface.get_editor_undo_redo()
    undo_redo.create_action("Colore di Sprite2D randomizzato")
    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 proprietà è esportata senza il flag @GlobalScope.PROPERTY_USAGE_STORAGE perché un Callable non può essere serializzato correttamente e memorizzato in un file.

Nota: In un progetto esportato non esistono né EditorInterfaceEditorUndoRedoManager, il che potrebbe causare alcuni script a non funzionare correttamente. Per evitare ciò, è possibile usare Engine.get_singleton() e omettere il tipo statico dalla dichiarazione della variabile:

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

Nota: Evita di memorizzare i chiamabili lambda nelle variabili membro delle classi basate su RefCounted (ad esempio risorse), poiché ciò può causare perdite di memoria. Utilizza solo i chiamabili da metodi e facoltativamente Callable.bind() o Callable.unbind().


@icon(icon_path: String) 🔗

Aggiunge un'icona personalizzata allo script attuale. L'icona specificata dal percorso icon_path viene visualizzata nel pannello di Scena per ogni nodo di quella classe, così come in varie finestre di dialogo dell'editor.

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

Nota: Solo lo script può avere un'icona personalizzata. Le classi interne non sono supportate.

Nota: Poiché le annotazioni descrivono il loro soggetto, l'annotazione @icon deve essere posta prima della definizione di classe e di eredità.

Nota: A differenza di altre annotazioni, l'argomento dell'annotazione @icon deve essere una stringa letterale (le espressioni costanti non sono supportate).


@onready() 🔗

Segna la proprietà seguente come assegnata quando il nodo è pronto. I valori per queste proprietà non vengono assegnati immediatamente quando il nodo viene inizializzato (Object._init()), e invece vengono calcolati e memorizzati subito prima di Node._ready().

@onready var nome_personaggio = $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() 🔗

Rende uno script con variabili statiche a non persistere dopo che tutti i suoi riferimenti sono persi. Se lo script viene caricato di nuovo le variabili statiche torneranno ai loro valori predefiniti.

Nota: Poiché le annotazioni descrivono il loro soggetto, l' annotazione @static_unload deve essere posta prima della definizione di classe e di eredità.

Attenzione: Attualmente, a causa di un bug, gli script non sono mai liberati, anche se l'annotazione @static_unload è utilizzata.


@tool() 🔗

Marca lo script attuale come script di strumento (tool), permettendo di caricarlo ed eseguirlo dall'editor. Vedi Esecuzione di codice nell'editor.

@tool
extends Node

Nota: Poiché le annotazioni descrivono il loro soggetto, l'annotazione @tool deve essere posta prima della definizione di classe e di eredità.


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

Segna la seguente dichiarazione per ignorare l'avviso specificato da warning. Vedi Sistema di avvisi di GDScript.

func test():
    print("ciao")
    return
    @warning_ignore("unreachable_code")
    print("non raggiungibile")

Vedi anche @warning_ignore_start e @warning_ignore_restore.


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

Smette di ignorare i tipi di avviso elencati dopo @warning_ignore_start. Ciò sarà reimpostato sulle Impostazioni del progetto. È possibile omettere questa annotazione per ignorare i tipi di avviso fino alla fine del file.

Nota: A differenza della maggior parte delle altre annotazioni, gli argomenti dell'annotazione @warning_ignore_restore devono essere stringhe letterali (le espressioni costanti non sono supportate).


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

Comincia a ignorare i tipi di avviso elencati fino alla fine del file o dell'annotazione @warning_ignore_restore con il tipo di avviso specificato.

func test():
    var a = 1 # Avviso (se abilitato nelle Impostazioni del progetto).
    @warning_ignore_start("unused_variable")
    var b = 2 # Nessun avviso.
    var c = 3 # Nessun avviso.
    @warning_ignore_restore("unused_variable")
    var d = 4 # Avviso (se abilitato nelle Impostazioni del progetto).

Nota: Per sopprimere un singolo avviso, usa invece @warning_ignore.

Nota: A differenza della maggior parte delle altre annotazioni, gli argomenti dell'annotazione @warning_ignore_restore devono essere stringhe letterali (le espressioni costanti non sono supportate).


Descrizioni dei metodi

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

Deprecato: Use Color.from_rgba8() instead.

Restituisce un Color costruito da rosso (r8), verde (g8), blu (b8), e facoltativamente alfa (a8) canali interi, ciascuno diviso da 255.0 per il loro valore finale. Utilizzare Color8() invece del costruttore di Color standard è utile quando è necessario corrispondere ai valori di colore esatti in un Image.

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

Nota: A causa della minore precisione di Color8() rispetto al costruttore standard di Color, un colore creato con Color8() generalmente non sarà uguale allo stesso colore creato con il costruttore standard di Color. Utilizzare Color.is_equal_approx() per i confronti per evitare problemi d'errori di precisione in virgola mobile.


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

Asserts that the condition is true. If the condition is false, an error is generated and the current method returns a default value. When running from the editor, failed asserts also cause a debugger break. This can be used as a stronger form of @GlobalScope.push_error() for reporting errors to project developers or add-on users.

An optional message can be shown in addition to the generic "Assertion failed" message. You can use this to provide additional details about why the assertion failed.

Warning: For performance reasons, the code inside assert() is only executed in debug builds or when running the project from the editor. Don't include code that has side effects in an assert() call. Otherwise, the project will behave differently when exported in release mode.

# Imagine we always want speed to be between 0 and 20.
var speed = -10
assert(speed < 20) # True, the program will continue.
assert(speed >= 0) # False, the program will stop.
assert(speed >= 0 and speed < 20) # You can also combine the two conditional statements in one check.
assert(speed < 20, "the speed limit is 20") # Show a message.

Note: assert() is a keyword, not a function. So you cannot access it as a Callable or use it inside expressions.


String char(code: int) 🔗

Restituisce un unico carattere (come String di lunghezza 1) del punto di codice Unicode code fornito.

print(char(65))     # Stampa "A"
print(char(129302)) # Stampa "🤖" (emoji faccia di robot)

È l'inverso di ord(). Vedi anche String.chr() e String.unicode_at().


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

Deprecato: Use @GlobalScope.type_convert() instead.

Converte what a un altro tipo nel miglior modo possibile. type usa i valori di Variant.Type.

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

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

Object dict_to_inst(dictionary: Dictionary) 🔗

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

Riconverte un dictionary (creato in precedenza con inst_to_dict()) in un'istanza di oggetto. Può essere utile per la deserializzazione.


Array get_stack() 🔗

Restituisce un array di dizionari che rappresentano lo stack di chiamate attuale. Vedi anche print_stack().

func _ready():
    foo()

func foo():
    bar()

func bar():
    print(get_stack())

A partire da _ready(), bar() stamperebbe:

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

Vedi anche print_debug(), print_stack() e Engine.capture_script_backtraces().

Nota: Come predefinito, i backtrace sono disponibili solo per le build dell'editor e di debug. Per abilitarli anche nelle build di rilascio, è necessario abilitare ProjectSettings.debug/settings/gdscript/always_track_call_stacks.


Dictionary inst_to_dict(instance: Object) 🔗

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

Restituisce l'istanza instance convertita in un Dictionary. Può essere utile per la serializzazione.

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

Stampa:

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

Nota: Questa funzione può essere utilizzata solo per serializzare oggetti il quale GDScript allegato è memorizzato in un file separato. Gli oggetti senza uno script allegato, con uno script scritto in un altro linguaggio o con uno script integrato non sono supportati.

Nota: Questa funzione non è ricorsiva, il che significa che gli oggetti annidati non saranno rappresentati come dizionari. Inoltre, le proprietà passate per riferimento (Object, Dictionary, Array e array impacchettati) vengono copiate per riferimento, non duplicate.


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

Returns true if value is an instance of type. The type value must be one of the following:

Unlike the right operand of the is operator, type can be a non-constant value. The is operator supports more features (such as typed arrays and dictionaries). Use the operator instead of this method if you do not need to check the type dynamically.

Examples:

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))

Note: If value and/or type are freed objects (see @GlobalScope.is_instance_valid()), or type is not one of the above options, this method will raise a runtime error.

See also @GlobalScope.typeof(), Object.is_class(), Object.get_script(), Array.is_same_typed() (and other Array methods), Dictionary.is_same_typed() (and other Dictionary methods).


int len(var: Variant) 🔗

Restituisce la lunghezza del Variant var. La lunghezza può essere il numero dei caratteri di una String o StringName, il numero degli elementi di un tipo di array, o la dimensione di un Dictionary. Per ogni altro tipo di Variant, un errore verrà generato e l'esecuzione verrà interrotta.

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

var b = "Ciao!"
len(b) # Restituisce 6

Resource load(path: String) 🔗

Restituisce una Resource dal filesystem posizionata nel percorso assoluto path. A meno che non sia già referenziata altrove (per esempio in un altro script o nella scena), la risorsa viene caricata dal disco alla chiamata del metodo, il che potrebbe causare un leggero ritardo, specialmente quando si caricano grandi scene. Per evitare ritardi superflui in caso di più caricamenti, salvare la risorsa in una variabile o usare preload(). Questo metodo è equivalente a usare ResourceLoader.load() con ResourceLoader.CACHE_MODE_REUSE.

Nota: È possibile ottenere i percorsi delle risorse cliccando con il tasto destro su una risorsa nel pannello Filesystem e scegliendo "Copia percorso" o trascinando il file dal pannello Filesystem nello script attuale.

# Carica una scena chiamata main che si trova alla radice della cartella di progetto e salvala temporaneamente in una variabile.
var main = load("res://main.tscn") # main conterrà una risorsa PackedScene.

Importante: I percorsi relativi non sono relativi allo script che chiama questo metodo, invece è preceduto da "res://". Il caricamento da percorsi relativi potrebbe non funzionare come previsto.

Questo metodo è una versione semplificata di ResourceLoader.load(), che può essere usata in casi più avanzati.

Nota: I file devono essere prima importati nel motore per caricarli tramite questa funzione. Se si desidera caricare Image in fase di esecuzione, è possibile usare Image.load(). Se si desidera importare file audio, è possibile usare lo snippet descritto in AudioStreamMP3.data.

Nota: Se ProjectSettings.editor/export/convert_text_resources_to_binary è true, load() non sarà in grado di leggere i file convertiti in un progetto esportato. Se è desiderato caricare i file presenti nel PCK in fase di esecuzione, imposta ProjectSettings.editor/export/convert_text_resources_to_binary su false.


int ord(char: String) 🔗

Restituisce un intero rappresentate il punto di codice Unicode del carattere char, che dovrebbe essere una stringa di lunghezza 1.

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

È l'inverso di char(). Vedi anche String.chr() e String.unicode_at().


Resource preload(path: String) 🔗

Restituisce una Resource dal filesystem situata nel percorso path. La risorsa viene caricata durante l'elaborazione dello script. Questa funzione funge effettivamente da riferimento a quella risorsa. Nota che questa funzione ha bisogno che path sia una String costante. Se devi caricare una risorsa da un percorso dinamico, usa load().

Nota: È possibile ottenere il percorso di una risorsa cliccando col tasto destro sulla risorsa in questione nel pannello Assets e scegliendo "Copia percorso" oppure trascinando il file dal pannello del Filesystem allo script attuale.

# Crea un Istanza di una scena.
var diamond = preload("res://diamond.tscn").instantiate()

Note: preload() è una parola chiave, non una funzione. Non è dunque possibile accedervi come Callable.


void print_debug(...) vararg 🔗

Come @GlobalScope.print(), ma include il frame dello stack attuale quando si è in esecuzione con il debugger attivato.

L'output nella console potrebbe avere il seguente aspetto:

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

Vedi anche print_stack(), get_stack() e Engine.capture_script_backtraces().

Nota: Come predefinito, i backtrace sono disponibili solo per le build dell'editor e di debug. Per abilitarli anche nelle build di rilascio, è necessario abilitare ProjectSettings.debug/settings/gdscript/always_track_call_stacks.


void print_stack() 🔗

Stampa lo stack trace dell'attuale posizione nel codice.

L'output nella console potrebbe avere il seguente aspetto:

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

Vedi anche print_debug(), get_stack(), e Engine.capture_script_backtraces().

Nota: Come predefinito, i backtrace sono disponibili solo per le build dell'editor e di debug. Per abilitarli anche nelle build di rilascio, è necessario abilitare ProjectSettings.debug/settings/gdscript/always_track_call_stacks.


Array range(...) vararg 🔗

Restituisce un array contenente l'intervallo fornito. range() può essere chiamato in tre modi:

range(n:int): Parte da 0, incrementa di 1 a ogni passaggio, e si ferma prima din. L'argomento n è esclusivo.

range(b: int, n: int): Parte da b, incrementa di 1 a ogni passaggio, e si ferma prima di n. Gli argomenti b e n sono, rispettivamente, inclusivo ed esclusivo.

range(b: int, n: int, s: int): Parte da b, aumenta/diminuisce di s a ogni passaggio, e si ferma prima di n. Gli argomenti b e n sono, rispettivamente, inclusivi ed esclusivi. L'argomento s può essere negativo, ma non 0. Se s è 0, un messaggio di errore verrà stampato.

range() converte tutti gli argomenti a int prima di elaborarli.

Nota: Restituisce un array vuoto se nessun valore soddisfa i requisiti (es. range(2, 5, -1) o range(5, 5, 1)).

Esempi:

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

Per iterare su un Array all'indietro, usa:

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

Risultato:

9
6
3

Per iterare su un float, convertili nel ciclo.

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

Risultato:

0.3
0.2
0.1

bool type_exists(type: StringName) 🔗

Deprecato: Use ClassDB.class_exists() instead.

Restituisce true se la classe specificata, derivata da Object, esiste in ClassDB. Nota che i tipi di dato Variant non sono registrati in ClassDB.

type_exists("Sprite2D") # Restituisce true
type_exists("NonExistentClass") # Restituisce false