Diferencias de la API de C# con GDScript¶
Esta es una lista (incompleta) de diferencias de la API de C# y GDScript.
Diferencias generales¶
Como se explica en el apartado :ref:doc_c_sharp
, C# utiliza generalmente PascalCase
en lugar del snake_case
utilizado en GDScript y C++.
Ámbito Global¶
Las funciones globales y algunas constantes tuvieron que ser movidas a clases, ya que C# no permite declararlas dentro de "espacios con nombre". La mayoría de las constantes globales fueron movidas a sus propias enumeraciones.
Constantes¶
Las constantes globales fueron movidas a sus propias enumeraciones. Por ejemplo, la constante ERR_*
fué movida a la enumeración Error
.
Casos especiales:
GDScript |
C# |
---|---|
|
|
|
|
|
|
Funciones Matemáticas¶
Las funciones matemáticas como abs
, acos
, asin
, atan
y atan2
se encuentran como miembros de``Mathf`` así: Abs
, Acos
, Asin
, Atan
y Atan2
. La constante PI
se encuentra como Mathf.Pi
.
Funciones Random¶
Las funciones globales random como rand_range
y `rand_seed
se encuentran bajo GD
, Ejemplo: GD.RandRange
y `GD.Rand_Seed
.
Otras funciones¶
Muchas otras funciones globales como print``y ``var2str
se encuentran también bajo GD
. Ejemplo: GD.Print
y GD.Var2Str
.
Excepciones:
GDScript |
C# |
---|---|
|
|
|
|
Trucos¶
Algunas veces puede ser útil usar la directiva using static
. Ésta directiva permite acceder a los miembros y tipos anidados de una clase sin especificar el nombre de la clase.
Ejemplo:
using static Godot.GD;
public class Test
{
static Test()
{
Print("Hello"); // Instead of GD.Print("Hello");
}
}
Palabra clave export¶
Utilice el atributo [Export]
en lugar de la palabra clave export
de GDScript. Este atributo también puede ser proporcionado con los parámetros opcionales PropertyHint y hintString
. Los valores por defecto se pueden establecer asignando un valor.
Ejemplo:
using Godot;
public 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;
}
Palabra clave signal¶
Use el atributo [Signal]
en declaraciones, en lugar de la palabre clave GDScript signal
. Este atributo debe ser usado en un delegate, cuya definición de nombre será usado para identificar la señal.
[Signal]
delegate void MySignal(string willSendsAString);
Ver también: Señales en C#.
Palabra clave onready¶
GDScript tiene la capacidad de diferir la inicialización de una variable miembro hasta que se llame a la función ready con onready (cf.: ref:` doc_gdscript_onready_keyword`). Por ejemplo:
onready var my_label = get_node("MyLabel")
Sin embargo, C # no tiene esta capacidad. Para lograr el mismo efecto, debe hacer esto.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
Instancias únicas¶
Las instancias únicas están disponibles como clases estáticas en lugar de usar el patrón de instancia única. Esto es para hacer el código más legible de lo que sería con una propiedad Instance
.
Ejemplo:
Input.IsActionPressed("ui_down")
Sin embargo, en algunos raros casos esto no es suficiente. Por ejemplo, puedes querer acceder a un miembro de la clase base Godot.Object
, como Connect
. Para esos casos proveemos una propiedad estática llamada Singleton``que regresa la instancia única. El tipo de esta instancia es ``Godot.Object
.
Ejemplo:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
Cadena¶
Utilice System.String
(string
). La mayoría de métodos para cadena de Godot son proporcionados por la clase StringExtensions
como métodos de extensión.
Ejemplo:
string upper = "I LIKE SALAD FORKS";
string lower = upper.ToLower();
Sin embargo, hay algunas diferencias:
erase
: Las cadenas son inalterables en C#, por lo que no podemos modificar la cadena pasada al método de extensión. Por esta razón se añadióErase
como método de extensión deStringBuilder
en lugar de string. También puedes usarstring.Remove
.IsSubsequenceOf
/IsSubsequenceOfi
: Se proporciona un método adicional que es una sobrecarga deIsSubsequenceOf
que permite especificar explícitamente la sensibilidad a mayúsculas y minúsculas:
str.IsSubsequenceOf("ok"); // Case sensitive
str.IsSubsequenceOf("ok", true); // Case sensitive
str.IsSubsequenceOfi("ok"); // Case insensitive
str.IsSubsequenceOf("ok", false); // Case insensitive
Match
/Matchn
/ExprMatch
: Se proporciona un método adicional además deMatch` y ``Matchn
, que permite especificar explícitamente la sensibilidad a mayúsculas y minúsculas:
str.Match("*.txt"); // Case sensitive
str.ExprMatch("*.txt", true); // Case sensitive
str.Matchn("*.txt"); // Case insensitive
str.ExprMatch("*.txt", false); // Case insensitive
Basis¶
Las estructuras no pueden tener constructores sin parámetros en C#, por lo tanto new Basis()
inicializa todos los miembros originales a su valor por defecto. Usa Basis.Identity
para el equivalente a Basis()
en GDScript y C++.
Los siguientes métodos fueron convertidos a propiedades con sus respectivos nombres cambiados:
GDScript |
C# |
---|---|
|
|
Transform2D¶
Las estructuras no pueden tener constructores sin parámetros en C#. Por lo tanto, new Transform2D()
inicializa todos los miembros primitivos a su valor por defecto. Por favor, usa Transform2D.Identity
para el equivalente de Transform2D()
en GDScript y C++.
Los siguientes métodos fueron convertidos a propiedades con sus respectivos nombres cambiados:
GDScript |
C# |
---|---|
|
|
|
|
Plano¶
Los siguientes métodos fueron convertidos a propiedades con sus respectivos nombres ligeramente cambiados:
GDScript |
C# |
---|---|
|
|
Rect2¶
Los siguientes campos se convirtieron en propiedades con sus respectivos nombres cambiados:
GDScript |
C# |
---|---|
end |
End |
Los siguientes métodos fueron convertidos a propiedades con sus respectivos nombres cambiados:
GDScript |
C# |
---|---|
|
|
Quat¶
Las estructuras no pueden tener constructores sin parámetros en C#, por lo tanto new Quat()
inicializa todos los miembros primitivos a su valor por defecto. Por favor, usa Quat.Identity
para el equivalente a Quat()
en GDScript y C++.
Los siguientes métodos fueron convertidos a propiedades con un nombre diferente:
GDScript |
C# |
---|---|
length() |
|
length_squared() |
LengthSquared |
Array¶
Esto es temporal. Los PoolArrays necesitarán sus propios tipos para ser usados de la manera en que están destinados.
GDScript |
C# |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Godot.Collections.Array<T>
es una envoltura de tipo-seguro para Godot.Collections.Array
. Usa el constructor Godot.Collections.Array<T>(Godot.Collections.Array)
para crear uno.
Diccionario¶
Usa Godot.Collections.Dictionary
.
Godot.Collections.Dictionary<T>
es una envoltura de tipo-seguro para Godot.Collections.Dictionary
. Utiliza el constructor Godot.Collections.Dictionary<T>(Godot.Collections.Dictionary)
para crear uno.
Variant¶
System.Object
(object
) es usado en lugar de Variant
.
Comunicándose con otros lenguajes de scripting¶
Esto se explica ampliamente en Scripting de varios lenguajes.
Yield¶
Algo similar a yield
de GDScript con un único parámetro puede ser conseguido con la palabra clave "yield" de C # <https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/keywords/yield>`.
El equivalente de "yield" sobre una señal puede conseguirse con "async/await" y Godot.Object.ToSignal
.
Ejemplo:
await ToSignal(timer, "timeout");
GD.Print("After timeout");
Otras diferencias¶
preload
, sí como trabaja en GDScript, no está disponible en C#. Usa GD.Load
o ResourceLoader.Load
en su lugar.
Otras diferencias:
GDScript |
C# |
---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |