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.
Checking the stable version of the documentation...
Differenze dell'API C# rispetto a GDScript
Questa è un elenco (incompleta) di differenze di API tra C# e GDScript.
Differenze generali
Come spiegato in Differenze generali tra C# e GDScript, il PascalCase è usato per accedere alle API di Godot in C# al posto del snake_case usato da GDScript e C++. Ove possibile, campi e getter/setter sono stati convertiti in proprietà. In generale, l'API di Godot in C# cerca di essere il più idiomatica possibile. Consultate la Guida di stile C#, che vi invitiamo a utilizzare anche per il proprio codice C#.
In GDScript, i setter/getter di una proprietà si possono chiamare direttamente, sebbene ciò non sia consigliato. In C#, solo la proprietà è definita. Ad esempio, per tradurre il codice GDScript x.set_name("Friend") in C#, scrivere x.Name = "Friend";.
Un IDE C# fornirà IntelliSense, estremamente utile per scoprire le API rinominate in C#. L'editor integrato di script in Godot non supporta IntelliSense per C#, e non fornisce molti altri strumenti di sviluppo per C# che sono considerati essenziali. Consulta Configurare un editor esterno.
Ambito globale
Le funzioni globali e alcune costanti si sono dovute spostare in classi, poiché C# non consente di dichiararle nei namespace. La maggior parte delle costanti globali è stata spostata nelle proprie enumerazioni.
Costanti
In C#, solo i tipi primitivi possono essere costanti. Ad esempio, la costante TAU è sostituita dalla costante Mathf.Tau, ma la costante Vector2.RIGHT è sostituita dalla proprietà di sola lettura Vector2.Right. Questa si comporta in modo simile a una costante, ma non può essere utilizzata in alcuni contesti come istruzioni switch.
Le costanti delle enumerazioni globali sono state spostate nelle proprie enumerazioni. Ad esempio, le costanti ERR_* sono state spostate nell'enumerazione Error.
Casi speciali:
GDScript |
C# |
|---|---|
|
|
|
|
Funzioni matematiche
Le funzioni matematiche globali, come abs, acos, asin, atan e atan2, sono situate in Mathf sotto forma di Abs, Acos, Asin, Atan e Atan2. La costante PI si trova come Mathf.Pi.
C# fornisce anche le classi statiche System.Math e System.MathF che possono contenere altre utili operazioni matematiche.
Funzioni Random
Le funzioni globali Random, come rand_range e rand_seed, si trovano in GD. Esempio: GD.RandRange e GD.RandSeed.
Si consiglia di utilizzare System.Random oppure, se è necessaria un'elevata casualità crittografica, System.Security.Cryptography.RandomNumberGenerator.
Altre funzioni
Molte altre funzioni globali come print e var_to_str si trovano sotto GD. Esempio: GD.Print e GD.VarToStr.
Eccezioni:
GDScript |
C# |
|---|---|
|
|
|
|
|
|
|
|
Suggerimenti
A volte, può essere utile utilizzare la direttiva using static. Questa direttiva consente di accedere ai membri e ai tipi annidati di una classe senza specificare il nome della classe.
Esempio:
using static Godot.GD;
public class Test
{
static Test()
{
Print("Hello"); // Instead of GD.Print("Hello");
}
}
Elenco completo di equivalenze
Elenco delle funzioni di ambito globale di Godot e dei loro equivalenti in C#:
GDScript |
C# |
|---|---|
abs |
Mathf.Abs |
absf |
Mathf.Abs |
absi |
Mathf.Abs |
acos |
Mathf.Acos |
acosh |
Mathf.Acosh |
angle_difference |
Mathf.AngleDifference |
asin |
Mathf.Asin |
asinh |
Mathf.Asinh |
atan |
Mathf.Atan |
atan2 |
Mathf.Atan2 |
atanh |
Mathf.Atanh |
bezier_derivative |
Mathf.BezierDerivative |
bezier_interpolate |
Mathf.BezierInterpolate |
bytes_to_var |
GD.BytesToVar |
bytes_to_var_with_objects |
GD.BytesToVarWithObjects |
ceil |
Mathf.Ceil |
ceilf |
Mathf.Ceil |
ceili |
Mathf.CeilToInt |
clamp |
Mathf.Clamp |
clampf |
Mathf.Clamp |
clampi |
Mathf.Clamp |
cos |
Mathf.Cos |
cosh |
Mathf.Cosh |
cubic_interpolate |
Mathf.CubicInterpolate |
cubic_interpolate_angle |
Mathf.CubicInterpolateAngle |
cubic_interpolate_angle_in_time |
Mathf.CubicInterpolateInTime |
cubic_interpolate_in_time |
Mathf.CubicInterpolateAngleInTime |
db_to_linear |
Mathf.DbToLinear |
deg_to_rad |
Mathf.DegToRad |
ease |
Mathf.Ease |
error_string |
Error.ToString |
exp |
Mathf.Exp |
floor |
Mathf.Floor |
floorf |
Mathf.Floor |
floori |
Mathf.FloorToInt |
fmod |
Operatore % |
fposmod |
Mathf.PosMod |
hash |
GD.Hash |
instance_from_id |
GodotObject.InstanceFromId |
inverse_lerp |
Mathf.InverseLerp |
is_equal_approx |
Mathf.IsEqualApprox |
is_finite |
Mathf.IsFinite o float.IsFinite o double.IsFinite |
is_inf |
Mathf.IsInf o float.IsInfinity o double.IsInfinity |
is_instance_id_valid |
GodotObject.IsInstanceIdValid |
is_instance_valid |
GodotObject.IsInstanceValid |
is_nan |
Mathf.IsNaN or float.IsNaN or double.IsNaN |
is_same |
Operatore == o object.ReferenceEquals |
is_zero_approx |
Mathf.IsZeroApprox |
lerp |
Mathf.Lerp |
lerp_angle |
Mathf.LerpAngle |
lerpf |
Mathf.Lerp |
linear_to_db |
Mathf.LinearToDb |
log |
Mathf.Log |
max |
Mathf.Max |
maxf |
Mathf.Max |
maxi |
Mathf.Max |
min |
Mathf.Min |
minf |
Mathf.Min |
mini |
Mathf.Min |
move_toward |
Mathf.MoveToward |
nearest_po2 |
Mathf.NearestPo2 |
pingpong |
Mathf.PingPong |
posmod |
Mathf.PosMod |
pow |
Mathf.Pow |
GD.Print |
|
print_rich |
GD.PrintRich |
print_verbose |
Utilizzare OS.IsStdoutVerbose e GD.Print |
printerr |
GD.PrintErr |
printraw |
GD.PrintRaw |
prints |
GD.PrintS |
printt |
GD.PrintT |
push_error |
GD.PushError |
push_warning |
GD.PushWarning |
rad_to_deg |
Mathf.RadToDeg |
rand_from_seed |
GD.RandFromSeed |
randf |
GD.Randf |
randf_range |
GD.RandRange |
randfn |
GD.Randfn |
randi |
GD.Randi |
randi_range |
GD.RandRange |
randomize |
GD.Randomize |
remap |
Mathf.Remap |
rid_allocate_id |
N/A |
rid_from_int64 |
N/A |
rotate_toward |
Mathf.RotateToward |
round |
Mathf.Round |
roundf |
Mathf.Round |
roundi |
Mathf.RoundToInt |
seed |
GD.Seed |
sign |
Mathf.Sign |
signf |
Mathf.Sign |
signi |
Mathf.Sign |
sin |
Mathf.Sin |
sinh |
Mathf.Sinh |
smoothstep |
Mathf.SmoothStep |
snapped |
Mathf.Snapped |
snappedf |
Mathf.Snapped |
snappedi |
Mathf.Snapped |
sqrt |
Mathf.Sqrt |
step_decimals |
Mathf.StepDecimals |
str |
Usare $ string interpolation |
str_to_var |
GD.StrToVar |
tan |
Mathf.Tan |
tanh |
Mathf.Tanh |
type_convert |
Variant.As<T> o GD.Convert |
type_string |
Variant.Type.ToString |
typeof |
Variant.VariantType |
var_to_bytes |
GD.VarToBytes |
var_to_bytes_with_objects |
GD.VarToBytesWithObjects |
var_to_str |
GD.VarToStr |
weakref |
GodotObject.WeakRef |
wrap |
Mathf.Wrap |
wrapf |
Mathf.Wrap |
wrapi |
Mathf.Wrap |
Elenco delle funzioni di utilità in GDScript e dei loro equivalenti in C#:
GDScript |
C# |
|---|---|
assert |
|
char |
Utilizzare la conversione esplicita: |
convert |
GD.Convert |
dict_to_inst |
N/A |
get_stack |
|
inst_to_dict |
N/A |
len |
N/A |
load |
GD.Load |
preload |
N/A |
print_debug |
N/A |
print_stack |
GD.Print(System.Environment.StackTrace) |
range |
GD.Range o System.Linq.Enumerable.Range |
type_exists |
ClassDB.ClassExists(type) |
preload, così come funziona in GDScript, non è disponibile in C#. Utilizzare invece GD.Load o ResourceLoader.Load.
Annotazione @export
Utilizzare l'attributo [Export] al posto dell'annotazione @export di GDScript. Questo attributo si può anche fornire con i parametri facoltativi PropertyHint e hintString. È possibile impostare i valori predefiniti assegnando un valore.
Esempio:
using Godot;
public partial class MyNode : Node
{
[Export]
private NodePath _nodePath;
[Export]
private string _name = "default";
[Export(PropertyHint.Range, "0,100000,1000,or_greater")]
private int _income;
[Export(PropertyHint.File, "*.png,*.jpg")]
private string _icon;
}
Vedi anche : Proprietà esportate in C#.
Parola chiave signal
Utilizzare l'attributo [Signal] per dichiarare un segnale al posto della parola chiave signal di GDScript. Questo attributo deve essere utilizzato su un delegate`, la cui firma del nome sarà utilizzata per definire il segnale. Il delegate deve avere il suffisso EventHandler; un event sarà generato nella classe con lo stesso nome ma senza il suffisso; utilizzare il nome di quell'evento con EmitSignal.
[Signal]
delegate void MySignalEventHandler(string willSendAString);
Vedi anche: Segnali in C#.
Annotazione @onready
GDScript è possibile rinviare l'inizializzazione di una variabile membro fino a quando la funzione ready non viene chiamata con @onready (cfr. L'annotazione @onready). Ad esempio:
@onready var my_label = get_node("MyLabel")
Tuttavia, ciò non è possibile in C#. Per ottenere lo stesso effetto, è necessario procedere in questo modo.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
Singleton
I singleton sono disponibili come classi statiche anziché utilizzare il pattern singleton. Ciò per rendere il codice meno verboso di quello che sarebbe con una proprietà Instance.
Esempio:
Input.IsActionPressed("ui_down")
Tuttavia, in alcuni casi molto rari ciò non è sufficiente. Ad esempio, potresti voler accedere a un membro della classe base GodotObject, come Connect. Per questi casi d'uso forniamo una proprietà statica denominata Singleton che restituisce l'istanza singleton. Il tipo di questa istanza è GodotObject.
Esempio:
Input.Singleton.JoyConnectionChanged += Input_JoyConnectionChanged;
Se si sviluppano plugin per la schermata principale, è fondamentale notare che EditorInterface non è una classe statica in C#, a differenza di GDScript. Pertanto, è necessario utilizzare il pattern singleton per ottenere un'istanza di EditorInterface:
GDScript |
C# |
|---|---|
|
|
Stringa
Usa System.String (string). La maggior parte dei metodi di String in Godot ha un equivalente in System.String o sono forniti dalla classe StringExtensions come metodi di estensione.
Si noti che le stringhe in C# utilizzano la codifica UTF-16, mentre le stringhe in Godot utilizzano la codifica UTF-32.
Esempio:
string text = "Get up!";
string[] bigrams = text.Bigrams(); // ["Ge", "et", "t ", " u", "up", "p!"]
Le stringhe sono immutabili in .NET, quindi tutti i metodi che manipolano una stringa non modificano la stringa originale e restituiscono una stringa appena creata con le modifiche applicate. Per evitare di creare più allocazioni di stringhe, si consiglia di utilizzare uno StringBuilder.
Elenco dei metodi di String in Godot e dei loro equivalenti in C#:
GDScript |
C# |
|---|---|
begins_with |
|
bigrams |
StringExtensions.Bigrams |
bin_to_int |
StringExtensions.BinToInt |
c_escape |
StringExtensions.CEscape |
c_unescape |
StringExtensions.CUnescape |
capitalize |
StringExtensions.Capitalize |
casecmp_to |
StringExtensions.CasecmpTo o StringExtensions.CompareTo (Si consiglia di usare string.Equals o string.Compare) |
chr |
N/A |
contains |
|
count |
StringExtensions.Count (Si consiglia di usare RegEx) |
countn |
StringExtensions.CountN (Si consiglia di usare RegEx) |
dedent |
StringExtensions.Dedent |
ends_with |
|
erase |
string.Remove (Si consiglia di usare StringBuilder per manipolare le stringhe) |
find |
StringExtensions.Find (Si consiglia di usare string.IndexOf o string.IndexOfAny) |
findn |
StringExtensions.FindN (Si consiglia di usare string.IndexOf o string.IndexOfAny) |
format |
Usare $ string interpolation |
get_base_dir |
StringExtensions.GetBaseDir |
get_basename |
StringExtensions.GetBaseName |
get_extension |
StringExtensions.GetExtension |
get_file |
StringExtensions.GetFile |
get_slice |
N/A |
get_slice_count |
N/A |
get_slicec |
N/A |
hash |
StringExtensions.Hash (Si consiglia di usare object.GetHashCode almeno che non sia necessario garantire lo stesso comportamento di GDScript) |
hex_decode |
StringExtensions.HexDecode (Si consiglia di usare System.Convert.FromHexString) |
hex_to_int |
StringExtensions.HexToInt (Si consiglia di usare int.Parse o long.Parse con System.Globalization.NumberStyles.HexNumber) |
humanize_size |
N/A |
indent |
StringExtensions.Indent |
insert |
string.Insert (Si consiglia di usare StringBuilder per manipolare le stringhe) |
is_absolute_path |
StringExtensions.IsAbsolutePath |
is_empty |
|
is_relative_path |
StringExtensions.IsRelativePath |
is_subsequence_of |
StringExtensions.IsSubsequenceOf |
is_subsequence_ofn |
StringExtensions.IsSubsequenceOfN |
is_valid_filename |
StringExtensions.IsValidFileName |
is_valid_float |
StringExtensions.IsValidFloat (Si consiglia di usare float.TryParse o double.TryParse) |
is_valid_hex_number |
StringExtensions.IsValidHexNumber |
is_valid_html_color |
StringExtensions.IsValidHtmlColor |
is_valid_identifier |
StringExtensions.IsValidIdentifier |
is_valid_int |
StringExtensions.IsValidInt (Si consiglia di usare int.TryParse o long.TryParse) |
is_valid_ip_address |
StringExtensions.IsValidIPAddress |
join |
|
json_escape |
StringExtensions.JSONEscape |
left |
StringExtensions.Left (Si consiglia di usare string.Substring o string.AsSpan) |
length |
|
lpad |
|
lstrip |
|
match |
StringExtensions.Match (Si consiglia di usare RegEx) |
matchn |
StringExtensions.MatchN (Si consiglia di usare RegEx) |
md5_buffer |
StringExtensions.Md5Buffer (Si consiglia di usare System.Security.Cryptography.MD5.HashData) |
md5_text |
StringExtensions.Md5Text (Si consiglia di usare System.Security.Cryptography.MD5.HashData con StringExtensions.HexEncode) |
naturalnocasecmp_to |
N/A (Si consiglia di usare string.Equals o string.Compare) |
nocasecmp_to |
StringExtensions.NocasecmpTo or StringExtensions.CompareTo (Si consiglia di usare string.Equals o string.Compare) |
num |
|
num_int64 |
|
num_scientific |
|
num_uint64 |
|
pad_decimals |
StringExtensions.PadDecimals |
pad_zeros |
StringExtensions.PadZeros |
path_join |
StringExtensions.PathJoin |
repeat |
Utilizzare string constructor o uno StringBuilder |
replace |
|
replacen |
StringExtensions.ReplaceN (Si consiglia di usare string.Replace o RegEx) |
reverse |
N/A |
rfind |
StringExtensions.RFind (Si consiglia di usare string.LastIndexOf o string.LastIndexOfAny) |
rfindn |
StringExtensions.RFindN (Si consiglia di usare string.LastIndexOf o string.LastIndexOfAny) |
right |
StringExtensions.Right (Si consiglia di usare string.Substring o string.AsSpan) |
rpad |
|
rsplit |
N/A |
rstrip |
|
sha1_buffer |
StringExtensions.Sha1Buffer (Si consiglia di usare System.Security.Cryptography.SHA1.HashData) |
sha1_text |
StringExtensions.Sha1Text (Si consiglia di usare System.Security.Cryptography.SHA1.HashData con StringExtensions.HexEncode) |
sha256_buffer |
StringExtensions.Sha256Buffer (Si consiglia di usare System.Security.Cryptography.SHA256.HashData) |
sha256_text |
StringExtensions.Sha256Text (Si consiglia di usare System.Security.Cryptography.SHA256.HashData con StringExtensions.HexEncode) |
similarity |
StringExtensions.Similarity |
simplify_path |
StringExtensions.SimplifyPath |
split |
StringExtensions.Split (Si consiglia di usare string.Split) |
split_floats |
StringExtensions.SplitFloat |
strip_edges |
StringExtensions.StripEdges (Si consiglia di usare string.Trim, string.TrimStart o string.TrimEnd) |
strip_escapes |
StringExtensions.StripEscapes |
substr |
StringExtensions.Substr (Si consiglia di usare string.Substring o string.AsSpan) |
to_ascii_buffer |
StringExtensions.ToAsciiBuffer (Si consiglia di usare System.Text.Encoding.ASCII.GetBytes) |
to_camel_case |
StringExtensions.ToCamelCase |
to_float |
StringExtensions.ToFloat (Si consiglia di usare float.TryParse o double.TryParse) |
to_int |
StringExtensions.ToInt (Si consiglia di usare int.TryParse o long.TryParse) |
to_lower |
|
to_pascal_case |
StringExtensions.ToPascalCase |
to_snake_case |
StringExtensions.ToSnakeCase |
to_upper |
|
to_utf16_buffer |
StringExtensions.ToUtf16Buffer (Si consiglia di usare System.Text.Encoding.UTF16.GetBytes) |
to_utf32_buffer |
StringExtensions.ToUtf32Buffer (Si consiglia di usare System.Text.Encoding.UTF32.GetBytes) |
to_utf8_buffer |
StringExtensions.ToUtf8Buffer (Si consiglia di usare System.Text.Encoding.UTF8.GetBytes) |
to_wchar_buffer |
StringExtensions.ToUtf16Buffer in Windows e StringExtensions.ToUtf32Buffer in altre piattaforme |
trim_prefix |
StringExtensions.TrimPrefix |
trim_suffix |
StringExtensions.TrimSuffix |
unicode_at |
Indicizzatore string[int] |
uri_decode |
StringExtensions.URIDecode (Si consiglia di usare System.Uri.UnescapeDataString) |
uri_encode |
StringExtensions.URIEncode (Si consiglia di usare System.Uri.EscapeDataString) |
validate_node_name |
StringExtensions.ValidateNodeName |
xml_escape |
StringExtensions.XMLEscape |
xml_unescape |
StringExtensions.XMLUnescape |
Elenco dei metodi di PackedByteArray in Godot che creano una stringa e i loro equivalenti in C#:
GDScript |
C# |
|---|---|
get_string_from_ascii |
StringExtensions.GetStringFromAscii (Si consiglia di usare System.Text.Encoding.ASCII.GetString) |
get_string_from_utf16 |
StringExtensions.GetStringFromUtf16 (Si consiglia di usare System.Text.Encoding.UTF16.GetString) |
get_string_from_utf32 |
StringExtensions.GetStringFromUtf32 (Si consiglia di usare System.Text.Encoding.UTF32.GetString) |
get_string_from_utf8 |
StringExtensions.GetStringFromUtf8 (Si consiglia di usare System.Text.Encoding.UTF8.GetString) |
hex_encode |
StringExtensions.HexEncode (Si consiglia di usare System.Convert.ToHexString) |
Nota
.NET fornisce metodi di utilità per i percorsi nella classe System.IO.Path. Si possono utilizzare solo con i percorsi nativi del sistema operativo, non con i percorsi di Godot (percorsi che iniziano con res:// o user://). Vedi Percorsi di file nei progetti di Godot.
NodePath
Il seguente metodo è stato convertito in una proprietà con un nome diverso:
GDScript |
C# |
|---|---|
|
|
Segnale
I seguenti metodi sono stati convertiti in proprietà con i loro corrispondenti nomi modificati:
GDScript |
C# |
|---|---|
|
|
|
|
Il tipo Signal implementa il pattern awaitable, il che significa che si può utilizzare con la parola chiave await. Vedere Parola chiave await.
Invece di usare il tipo Signal, il modo consigliato per usare i segnali di Godot in C# è usare gli eventi C# generati. Vedi Segnali in C#.
Callable
I seguenti metodi sono stati convertiti in proprietà con i loro corrispondenti nomi modificati:
GDScript |
C# |
|---|---|
|
|
|
|
Attualmente C# supporta Callable se vale una delle seguenti condizioni:
Callableè stato creato attraverso il tipoCallabledi C#.Callableè una versione base delCallabledel motore. ICallablepersonalizzati non sono supportati. UnCallableè personalizzato quando vale una delle seguenti condizioni:Il
Callableha informazioni vincolate (iCallablecreati conbind/unbindnon sono supportati).Il
Callableè stato creato da altri linguaggi tramite l'API di GDExtension.
Alcuni metodi come bind e unbind non sono implementati, al loro posto si utilizzano le lambda:
string name = "John Doe";
Callable callable = Callable.From(() => SayHello(name));
void SayHello(string name)
{
GD.Print($"Hello {name}");
}
La lambda cattura la variabile name in modo che si possa vincolare al metodo SayHello.
RID
Questo tipo è denominato Rid in C# per rispettare la convenzione di denominazione .NET.
I seguenti metodi sono stati convertiti in proprietà con i loro corrispondenti nomi modificati:
GDScript |
C# |
|---|---|
|
|
|
|
Basis
Le strutture non possono avere costruttori senza parametri in C#. Pertanto, new Basis() inizializza tutti i membri primitivi al loro valore predefinito. Utilizzare Basis.Identity per l'equivalente di Basis() in GDScript e C++.
Il seguente metodo è stato convertito in una proprietà con un nome diverso:
GDScript |
C# |
|---|---|
|
|
Transform2D
Le strutture non possono avere costruttori senza parametri in C#. Pertanto, new Transform2D() inizializza tutti i membri primitivi al loro valore predefinito. Si prega di utilizzare Transform2D.Identity per l'equivalente di Transform2D() in GDScript e C++.
I seguenti metodi sono stati convertiti in proprietà con i loro corrispondenti nomi modificati:
GDScript |
C# |
|---|---|
|
|
|
|
|
|
Transform3D
Le strutture non possono avere costruttori senza parametri in C#. Pertanto, new Transform3D() inizializza tutti i membri primitivi al loro valore predefinito. Si prega di utilizzare Transform3D.Identity per l'equivalente di Transform3D() in GDScript e C++.
I seguenti metodi sono stati convertiti in proprietà con i loro corrispondenti nomi modificati:
GDScript |
C# |
|---|---|
|
|
|
|
Rect2
Il seguente campo è stato convertito in una proprietà con un nome leggermente diverso:
GDScript |
C# |
|---|---|
|
|
Il seguente metodo è stato convertito in una proprietà con un nome diverso:
GDScript |
C# |
|---|---|
|
|
Rect2i
Questo tipo è denominato Rect2I in C# per rispettare la convenzione di denominazione .NET.
Il seguente campo è stato convertito in una proprietà con un nome leggermente diverso:
GDScript |
C# |
|---|---|
|
|
Il seguente metodo è stato convertito in una proprietà con un nome diverso:
GDScript |
C# |
|---|---|
|
|
AABB
Questo tipo è denominato Aabb in C# per rispettare la convenzione di denominazione .NET.
Il seguente metodo è stato convertito in una proprietà con un nome diverso:
GDScript |
C# |
|---|---|
|
|
Quaternion
Le strutture non possono avere costruttori senza parametri in C#. Pertanto, new Quaternion() inizializza tutti i membri primitivi al loro valore predefinito. Si prega di utilizzare Quaternion.Identity per l'equivalente di Quaternion() in GDScript e C++.
Projection
Le strutture non possono avere costruttori senza parametri in C#. Pertanto, new Projection() inizializza tutti i membri primitivi al loro valore predefinito. Si prega di utilizzare Projection.Identity per l'equivalente di Projection() in GDScript e C++.
Colore
Le strutture non possono avere costruttori senza parametri in C#. Pertanto, new Color() inizializza tutti i membri primitivi al loro valore predefinito (che rappresenta il colore nero trasparente). Si prega di utilizzare Color.Black per l'equivalente di Color() in GDScript e C++.
Il metodo globale Color8 per costruire un colore da byte è disponibile come metodo statico nel tipo Color.
Le costanti di Color sono disponibili nella classe statica Colors come proprietà di sola lettura.
Il seguente metodo è stato convertito in una proprietà con un nome diverso:
GDScript |
C# |
|---|---|
|
|
Il seguente metodo è stato convertito in un metodo con un nome diverso:
GDScript |
C# |
|---|---|
|
|
I seguenti metodi sono disponibili come costruttori:
GDScript |
C# |
|---|---|
|
|
|
|
Array
L'equivalente degli array impacchettati è System.Array.
Consulta anche PackedArray in C#.
Utilizzare Godot.Collections.Array per un array Variant non tipizzato. Godot.Collections.Array<T> è un wrapper di tipo sicuro per Godot.Collections.Array.
Consulta anche Array in C#.
Dizionario
Utilizzare Godot.Collections.Dictionary per un dizionario Variant non tipizzato. Godot.Collections.Dictionary<TKey, TValue> è un wrapper di tipo sicuro per Godot.Collections.Dictionary.
Consulta anche Dictionary in C#.
Variant
Godot.Variant è utilizzato per rappresentare il tipo nativo di Godot Variant. Qualsiasi tipo compatibile con Variant può essere convertito da/a esso.
Consulta anche Variante C#.
Comunicazione con altri linguaggi di scripting
Questo è spiegato in dettaglio in Scripting multi-linguaggio.
Parola chiave await
Qualcosa di simile alla parola chiave await di GDScript si può ottenere con la parola chiave await di C#.
La parola chiave await in C# si può utilizzare con qualsiasi espressione awaitable. È comunemente usata con operandi di tipo Task, Task<TResult>, ValueTask o ValueTask<TResult>.
Un'espressione t è awaitable se vale una delle seguenti condizioni:
tha un tipo determinato in fase di compilazionedynamic.tha un metodo di istanza o estensione accessibile denominatoGetAwaiterprivo di parametri e di parametri di tipo, e un tipo di ritornoAper il quale valgono tutte le seguenti condizioni:Aimplementa l'interfacciaSystem.Runtime.CompilerServices.INotifyCompletion.Adispone di una proprietà dell'istanza accessibile e leggibileIsCompleteddi tipobool.Adispone di un metodo di istanza accessibileGetResultsenza parametri e senza parametri di tipo.
Un equivalente di attendere un segnale in GDScript si può ottenere con la parola chiave await e GodotObject.ToSignal.
Esempio:
public async Task SomeFunction()
{
await ToSignal(timer, Timer.SignalName.Timeout);
GD.Print("After timeout");
}