Diferencias con la API de 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# |
---|---|
SPKEY |
GD.SpKey |
TYPE_* |
Variant.Type (enumeración) |
OP_* |
Variant.Operator (enumeración) |
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# |
---|---|
weakref(objeto) |
Object.WeakRef(objeto) |
is_instance_valid(objeto) |
Object.IsInstanceValid(objeto) |
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¶
Use the [Export]
attribute instead of the GDScript export
keyword.
This attribute can also be provided with optional PropertyHint and hintString
parameters.
Default values can be set by assigning a value.
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#
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# |
---|---|
get_scale() (propiedad) |
Scale (propiedad) |
Transform2D¶
Las estructuras no pueden tener constructores sin parámetros en C#, por lo tanto new Transform2D()
inicializa todos los miembros originales a su valor por defecto. Por favor, utilice Transform2D.Identity
para el equivalente a Transform2D()
en GDScript y C++.
Los siguientes métodos fueron convertidos a propiedades con sus respectivos nombres cambiados:
GDScript | C# |
---|---|
get_rotation() |
Rotation |
get_scale() (propiedad) |
Scale (propiedad) |
Plano¶
Los siguientes métodos fueron convertidos a propiedades con sus respectivos nombres ligeramente cambiados:
GDScript | C# |
---|---|
center() |
Center |
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# |
---|---|
get_area() |
Area |
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 |
length_squared() | LengthSquared |
Arreglo¶
Esto es temporal. Los PoolArrays necesitarán sus propios tipos para ser usados de la manera en que están destinados.
GDScript | C# |
---|---|
Array |
Godot.Collections.Array |
PoolIntArray |
int[] |
PoolByteArray |
byte[] |
PoolFloatArray |
float[] |
PoolStringArray |
String[] |
PoolColorArray |
Color[] |
PoolVector2Array |
Vector2[] |
PoolVector3Array |
Vector3[] |
Godot.Collections.Array<T>
is a type-safe wrapper around Godot.Collections.Array
.
Use the Godot.Collections.Array<T>(Godot.Collections.Array)
constructor to create one.
Diccionario¶
Use Godot.Collections.Dictionary
.
Godot.Collections.Dictionary<T>
is a type-safe wrapper around Godot.Collections.Dictionary
.
Use the Godot.Collections.Dictionary<T>(Godot.Collections.Dictionary)
constructor to create one.
Variant¶
System.Object
(object
) es usado en lugar de Variant
.
Comunicándose con otros lenguajes de scripting¶
Los métodos object Object.call(string method, params object[] args)
, object Object.get(string field)
y object Object.set(string field, object value)
se proporcionan para comunicarse con instancias de otros lenguajes de scripting a través de Variant API.
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# |
---|---|
Color8 |
Color.Color8 |
is_inf |
float.IsInfinity |
is_nan |
float.IsNaN |
dict2inst |
TODO |
inst2dict |
TODO |