C# API Unterschiede zu GDScript¶
Dies ist eine (unvollständige) Liste von API Unterschieden zwischen C# und GDScript.
Allgemeine Unterschiede¶
Wie im C# Grundlagen erklärt, benutzt C# generell PascalCase anstatt von snake_case, welches in GDScript und C++ benutzt wird.
Globaler Bereich¶
Globale Funktionen und einige Konstanten mussten in Klassen verschoben werden, da C# es nicht erlaubt sie in Namespaces zu deklarieren. Die meisten globalen Konstanten wurden in ihre eigenen Aufzählungen verschoben.
Konstanten¶
Globale Konstanten wurden in ihre eigenen Aufzählungen verschoben. Zum Beispiel wurden ERR_* Konstanten in die Error Aufzählung verschoben.
Sonderfälle:
GDScript |
C# |
|---|---|
|
|
|
|
|
|
Mathematische Funktionen¶
Globale Mathefunktionen wie abs, acos, asin, atan und atan2 liegen unter Mathf als Abs, Acos, Asin, Atan und Atan2. Die PI Konstante findet man unter Mathf.Pi.
Zufallsfunktionen¶
Globale Zufallsfunktionen wie rand_range und rand_seed liegen unter GD. Beispiel: GD.RandRange und GD.RandSeed.
Weitere Funktionen¶
Viele andere globale Funktionen wie print und var2str liegen unter GD. Beispiel: GD.Print und GD.Var2Str.
Ausnahmen:
GDScript |
C# |
|---|---|
|
|
|
|
Tipps¶
Manchmal kann es nützlich sein, die Direktive using static zu verwenden. Diese Anweisung ermöglicht den Zugriff auf die Mitglieder und verschachtelten Typen einer Klasse, ohne den Klassennamen anzugeben.
Beispiel:
using static Godot.GD;
public class Test
{
static Test()
{
Print("Hello"); // Instead of GD.Print("Hello");
}
}
Exportiere Schlüsselwort¶
Verwenden Sie die Eigenschaft [Export] anstelle des GDScript-Schlüsselworts export. Diese Eigenschaft kann auch mit diesen Parametern optional versehen werden: PropertyHint und hintString. Standardwerte können durch Zuweisen eines Werts festgelegt werden.
Beispiel:
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;
}
Signal Schlüsselwörter¶
Verwenden Sie die Eigenschaft [Signal] um ein Signal anstelle des GDScript-Schlüsselworts signal zu deklarieren. Diese Eigenschaft sollte für ein delegate verwendet werden, dessen Namenssignatur zur Definition des Signals verwendet wird.
[Signal]
delegate void MySignal(string willSendsAString);
Siehe auch: C# Signale.
onready Schlüsselwort¶
GDScript hat die Möglichkeit, die Initialisierung einer Member-Variable aufzuschieben, bis die Ready-Funktion mit onready aufgerufen wird (vgl. onready Schlüsselwort). Zum Beispiel:
onready var my_label = get_node("MyLabel")
C# verfügt jedoch nicht über diese Fähigkeit. Um den gleichen Effekt zu erzielen, muss das Folgende getan werden.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
Singletons¶
Singletons sind als statische Klassen verfügbar, anstatt das Singleton-Muster zu verwenden. Dies dient dazu den Code weniger ausführlich zu machen als bei einer Instance-Eigenschaft.
Beispiel:
Input.IsActionPressed("ui_down")
In einigen sehr seltenen Fällen reicht dies jedoch nicht aus. Beispielsweise möchten Sie vielleicht auf ein Mitglied aus der Basisklasse Godot.Object zugreifen, z.B. Connect. Für solche Anwendungsfälle stellen wir eine statische Eigenschaft mit dem Namen Singleton bereit, die die Singleton-Instanz zurückgibt. Der Typ dieser Instanz ist Godot.Object.
Beispiel:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
Zeichenkette¶
Verwenden Sie System.String (string). Die meisten String-Methoden von Godot werden von der Klasse StringExtensions als Erweiterungsmethoden bereitgestellt.
Beispiel:
string upper = "I LIKE SALAD FORKS";
string lower = upper.ToLower();
Es gibt allerdings ein paar Unterschiede:
erase: Zeichenfolgen sind in C# unveränderlich, daher können wir die an die Erweiterungsmethode übergebene Zeichenfolge nicht ändern. Aus diesem Grund wurdeEraseals Erweiterungsmethode vonStringBuilderanstelle von string hinzugefügt. Alternativ können Siestring.Removeverwenden.IsSubsequenceOf/IsSubsequenceOfi: Es wird eine zusätzliche Methode bereitgestellt, bei der es sich um eine Überladung vonIsSubsequenceOfhandelt, mit der Sie die Groß- und Kleinschreibung explizit angeben können:
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: NebenMatchundMatchnwird eine zusätzliche Methode bereitgestellt, mit der Sie die Groß- und Kleinschreibung explizit angeben können:
str.Match("*.txt"); // Case sensitive
str.ExprMatch("*.txt", true); // Case sensitive
str.Matchn("*.txt"); // Case insensitive
str.ExprMatch("*.txt", false); // Case insensitive
Basis¶
Strukturen können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Basis() alle primitiven Mitglieder auf ihren Standardwert. Verwenden Sie Basis.Identity anstelle von Basis() in GDScript und C++.
Die folgende Methode wurde in eine Eigenschaft mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Transform2D¶
Strukturen können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Transform2D() alle primitiven Elemente auf ihren Standardwert. Bitte verwenden Sie Transform2D.Identity anstelle von Transform2D() in GDScript und C++.
Die folgenden Methoden wurden in Eigenschaften konvertiert, deren jeweilige Namen geändert wurden:
GDScript |
C# |
|---|---|
|
|
|
|
Ebene¶
Die folgende Methode wurde in eine Eigenschaft mit einem etwas anderen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Rect2¶
Das folgende Feld wurde in eine Eigenschaft mit einem etwas anderen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Die folgende Methode wurde in eine Eigenschaft mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Quat¶
Strukturen können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Quat() alle primitiven Mitglieder auf ihren Standardwert. Bitte verwenden Sie Quat.Identity anstelle von Quat() in GDScript und C++.
Die folgenden Methoden wurden in eine Eigenschaft mit einem anderen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
|
|
Array¶
Das ist vorübergehend. PoolArrays benötigen ihre eigenen Typen um sie wie gewünscht zu verwenden.
GDScript |
C# |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Godot.Collections.Array<T> ist eine typsichere Hülle um Godot.Collections.Array. Verwenden Sie den Konstruktor Godot.Collections.Array<T>(Godot.Collections.Array) um eine zu erstellen.
Dictionary (Wörterbuch)¶
Nutze Godot.Collections.Dictionary.
Godot.Collections.Dictionary<T> ist eine typsichere Hülle um Godot.Collections.Dictionary. Verwenden Sie den Konstruktor Godot.Collections.Dictionary<T>(Godot.Collections.Dictionary) um eine zu erstellen.
Variante¶
System.Object (object) wird genutzt anstelle von Variant.
Kommunikation mit anderen Skriptsprachen¶
Dies wird detailliert beschrieben in Cross-Language-Scripting.
Ertrag (zur Diskussion)¶
Etwas Ähnliches wie GDScript's yield mit einem einzigen Parameter kann mit C#'s yield Schlüsselwort erreicht werden.
Das Gleiche wie yield für Signale kann mit async/await und ``Godot.Object.ToSignal``erreicht werden.
Beispiel:
await ToSignal(timer, "timeout");
GD.Print("After timeout");
Andere Unterschiede¶
preload wie es in GDScript funktioniert, ist in C# nicht verfügbar. Verwenden Sie stattdessen GD.Load oder ResourceLoader.Load.
Andere Unterschiede:
GDScript |
C# |
|---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |