Différences de l’API par rapport à GDScript

Il s’agit d’une liste (incomplète) des différences d’API entre C# et GDScript.

Différences générales

Comme expliqué dans le Introduction, C# utilise généralement PascalCase à la place du snake_case utilisé dans GDScript et C++.

Portée globale

Les fonctions globales et certaines constantes ont dû être déplacées dans des classes, puisque C# ne permet pas de les déclarer dans les espaces de noms. La plupart des constantes globales ont été déplacées dans leurs propres énumérations.

Constantes

Les constantes globales ont été déplacées dans leurs propres énumérations. Par exemple, les constantes ERR_* ont été déplacées dans l’énumération Error.

Cas particuliers :

GDScript C#
SPKEY GD.SpKey
TYPE_* Variant.Type enum
OP_* Variant.Operator enum

Fonctions mathématiques

Les fonctions mathématiques telles que abs, acos, asin, atan et atan2 sont situées dans Mathf : Abs, Acos, Asin, Atan and Atan2. La constante PI peut être trouvée dans Mathf.PI.

Fonctions aléatoires

Les fonctions globales aléatoires, comme rand_range et rand_seed, se trouvent sous « GD ». Exemple : GD.RandRange``et ``GD.RandSeed.

Autres fonctions

Beaucoup d’autres fonctions globales comme print et var2str se trouvent sous GD`. Exemple : GD.Print``et ``GD.Var2Str.

Exceptions :

GDScript C#
weakref(obj) Object.WeakRef(obj)
is_instance_valid(obj) Object.IsInstanceValid(obj)

Conseils

Parfois, il peut être utile d’utiliser la directive using static. Cette directive permet d’accéder aux membres et aux types imbriqués d’une classe sans spécifier le nom de la classe.

Exemple :

using static Godot.GD;

public class Test
{
    static Test()
    {
        Print("Hello"); // Instead of GD.Print("Hello");
    }
}

Mot-clé d’exportation

Utilisez l’attribut [Export] au lieu du mot-clé export dans GDScript.

Exemple :

using Godot;

public class MyNode : Node
{
    [Export]
    NodePath _nodePath;
}

Mot-clé de signal

Utilisez l’attribut [Signal] pour déclarer un signal au lieu du mot-clé GDScript signal. Cet attribut doit être utilisé sur un delegate, dont la signature de nom sera utilisée pour définir le signal.

[Signal]
delegate void MySignal(string willSendsAString);

Voir aussi : c_signals_sharp_signals

Singletons

Les singletons fournissent des méthodes statiques plutôt que d’utiliser le patron singleton. C’est pour rendre le code moins verbeux qu’il ne le serait avec une propriété Instance.

Exemple :

Input.IsActionPressed("ui_down")

Cependant, dans certains cas très rares, ce n’est pas suffisant. Par exemple, vous pouvez accéder à un membre de la classe de base Godot.Object, comme Connect. Pour l’utilisation de tels cas, nous fournissons une propriété statique nommée Singleton qui retourne l’instance du singleton. Le type de cette instance est Godot.Object.

Exemple :

Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));

Chaîne de caractères

Utilisez System.String (string). La plupart des méthodes String de Godot sont fournies par la classe ``StringExtensions”” comme méthodes d’extension.

Exemple :

string upper = "I LIKE SALAD FORKS";
string lower = upper.ToLower();

Il y a cependant quelques différences :

  • erase: les chaînes de caractères sont immuables en C#, nous ne pouvons donc pas modifier la chaîne passée à la méthode d’extension. Pour cette raison, Erase a été ajoutée comme méthode d’extension de StringBuilder au lieu de string. Alternativement, vous pouvez utiliser string.Remove.
  • IsSubsequenceOf/IsSubsequenceOfi : Une méthode supplémentaire est fournie, qui est une surcharge de IsSubsequenceOf permettant de spécifier explicitement la sensibilité à la casse :
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 : Une méthode supplémentaire est fournie en plus de Match et Matchn, qui permet de spécifier explicitement la sensibilité à la casse :
str.Match("*.txt"); // Case sensitive
str.ExprMatch("*.txt", true); // Case sensitive
str.Matchn("*.txt"); // Case insensitive
str.ExprMatch("*.txt", false); // Case insensitive

Basis

Les Structs ne peuvent pas avoir de constructeurs sans paramètres en C#, c’est pourquoi new Basis() initialise tous les membres primitifs à leur valeur par défaut. Utilisez Basis.Identity pour l’équivalent de Basis() en GDScript et C++.

La méthode suivante a été convertie en une propriété avec un nom différent :

GDScript C#
get_scale() Scale

Transform2D

Les Structs ne peuvent pas avoir de constructeurs sans paramètres en C#, c’est pourquoi new Transform2D() initialise tous les membres primitifs à leur valeur par défaut. Veuillez utiliser Transform2D.Identity pour l’équivalent de ``Transform2D()``en GDScript et C++.

Les méthodes suivantes ont été converties en propriétés avec leurs noms respectifs modifiés :

GDScript C#
get_rotation() Rotation
get_scale() Scale

Plane

La méthode suivante a été convertie en une propriété avec un nom légèrement différent :

GDScript C#
center() Center

Rect2

Le champ suivant a été converti en une propriété avec un nom légèrement différent :

GDScript C#
end End

La méthode suivante a été convertie en une propriété avec un nom différent :

GDScript C#
get_area() Area

Quat

Les Structs ne peuvent pas avoir de constructeurs sans paramètres en C#, c’est pourquoi new Quat() initialise tous les membres primitifs à leur valeur par défaut. Veuillez utiliser Quat.Identity pour l’équivalent de ``Quat()``en GDScript et C++.

Les méthodes suivantes ont été converties en une propriété avec un nom différent :

GDScript C#
length() Length
length_squared() LengthSquared

Tableau

C’est temporaire. Les PoolArrays auront besoin de leurs propres types pour être utilisés de la manière à laquelle ils sont destinés.

GDScript C#
Array Godot.Array
PoolIntArray int[]
PoolByteArray byte[]
PoolFloatArray float[]
PoolStringArray String[]
PoolColorArray Color[]
PoolVector2Array Vector2[]
PoolVector3Array Vector3[]

Godot.Array<T>T> est une encapsule de type sécurisé autour de Godot.Array. Utilisez le constructeur Godot.Array<T>(Godot.Array) pour en créer une.

Dictionnaire

Utilisez Godot.Dictionary.

Godot.Dictionary <T> est une encapsule de type sécurisé Godot.Dictionary. Utilisez le constructeur Godot.Dictionary <T>(Godot.Dictionary) pour en créer un.

Variant

System.Object (object) est utilisé à la place de Variant.

Communiquer avec d’autres langages de script

Les méthodes object Object.Call(string method, params object[] args), object Object.Get(string field) et object Object.Set(string field, object value) sont fournies pour communiquer avec les instances d’autres langages de script via l’API Variant.

Yield

Quelque chose de similaire à yield de GDScript avec un seul paramètre peut être réalisé avec le mot-clé yield de C#.

L’équivalent de yield sur un signal peut être obtenu avec async/await et Godot.Object.ToSignal.

Exemple :

await ToSignal(timer, "timeout");
GD.Print("After timeout");

Autres différences

preload`, comme il fonctionne en GDScript, n’est pas disponible en C#. Utilisez GD.Load` ou ResourceLoader.Load à la place.

Autres différences :

GDScript C#
Color8 Color.Color8
is_inf float.IsInfinity
is_nan float.IsNaN
dict2inst TODO
inst2dict TODO