Différences de l'API C# 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 Les bases du C#, 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# |
|---|---|
|
|
|
|
|
|
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# |
|---|---|
|
|
|
|
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é GDScript export. Cet attribut peut aussi être complété de paramètres optionnels PropertyHint et hintString. La valeur par défaut peut être réglée en assignant une valeur.
Exemple :
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;
}
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 : Signaux C#.
Mot-clé onready¶
GDScript a la possibilité de différer l'initialisation d'une variable membre jusqu'à ce que la fonction ready soit appelée avec onready (cf. Mot-clé onready). Par exemple :
onready var my_label = get_node("MyLabel")
Cependant, le C# ne dispose pas de cette capacité. Pour obtenir le même effet, vous devez procéder comme suit.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
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,Erasea été ajoutée comme méthode d'extension deStringBuilderau lieu de string. Alternativement, vous pouvez utiliserstring.Remove.IsSubsequenceOf/IsSubsequenceOfi: Une méthode supplémentaire est fournie, qui est une surcharge deIsSubsequenceOfpermettant 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 deMatchetMatchn, 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# |
|---|---|
|
|
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# |
|---|---|
|
|
|
|
Plan¶
La méthode suivante a été convertie en une propriété avec un nom légèrement différent :
GDScript |
C# |
|---|---|
|
|
Rect2¶
Le champ suivant a été converti en une propriété avec un nom légèrement différent :
GDScript |
C# |
|---|---|
|
|
La méthode suivante a été convertie en une propriété avec un nom différent :
GDScript |
C# |
|---|---|
|
|
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# |
|---|---|
|
|
|
|
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# |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Godot.Collections.Array<T> est une encapsule de type sécurisé autour de Godot.Collections.Array. Utilisez le constructeur Godot.Collections.Array<T>(Godot.Array) pour en créer une.
Dictionnaire¶
Utilisez Godot.Collections.Dictionary.
Godot.Collections.Dictionary <T> est une encapsule de type sécurisé Godot.Collections.Dictionary. Utilisez le constructeur Godot.Collections.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¶
Ceci est expliqué en détail dans Scripting multi-langage.
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# |
|---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |