C# API-Unterschiede zu GDScript
Dies ist eine (unvollständige) Liste von API-Unterschieden zwischen C# und GDScript.
Allgemeine Unterschiede
Wie in Allgemeine Unterschiede zwischen C# und GDScript erläutert, wird PascalCase für den Zugriff auf Godot-APIs in C# anstelle des von GDScript und C++ verwendeten snake_case verwendet. Wo möglich, wurden Felder und Getter/Setter in Propertys umgewandelt. Im Allgemeinen ist die C#-Godot-API bestrebt, so idiomatisch wie möglich zu sein. Siehe den C#-Styleguide, den wir Ihnen auch für Ihren eigenen C#-Code empfehlen.
In GDScript können die Setter/Getter einer Property direkt aufgerufen werden, obwohl dies nicht empfohlen wird. In C# wird nur die Property definiert. Um zum Beispiel den GDScript-Code x.set_name("Friend") in C# zu übersetzen, schreiben Sie x.Name = "Friend";.
Eine C#-IDE bietet Intellisense, was äußerst nützlich ist, wenn man umbenannte C#-APIs herausfinden möchte. Der eingebaute Godot-Skript-Editor hat keine Unterstützung für C#-Intellisense, und er bietet auch nicht viele andere essentielle C#-Entwicklungswerkzeuge. Siehe Einen externen Editor konfigurieren.
Globaler Scope
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 Enums verschoben.
Konstanten
In C# können nur primitive Typen konstant sein. Zum Beispiel wird die Konstante TAU durch die Konstante Mathf.Tau ersetzt, aber die Konstante Vector2.RIGHT wird durch die schreibgeschützte Property Vector2.Right ersetzt. Diese verhält sich ähnlich wie eine Konstante, kann aber in einigen Zusammenhängen, wie Switch-Anweisungen, nicht verwendet werden.
Globale Enum-Konstanten wurden in ihre eigenen Enums verschoben. Zum Beispiel wurden die ERR_*-Konstanten in das Error-Enum verschoben.
Sonderfälle:
GDScript |
C# |
|---|---|
|
|
|
|
Mathematische Funktionen
Globale Mathematische Funktionen 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.
C# bietet auch statische System.Math und System.MathF-Klassen, die weitere nützliche mathematische Operationen enthalten können.
Zufallsfunktionen
Globale Zufallsfunktionen wie rand_range und rand_seed liegen unter GD. Beispiel: GD.RandRange und GD.RandSeed.
Erwägen Sie die Verwendung von System.Random oder, wenn Sie kryptographisch starke Zufälligkeit benötigen, System.Security.Cryptography.RandomNumberGenerator.
Weitere Funktionen
Viele andere globale Funktionen wie print und var_to_str befinden sich unter GD. Beispiel: GD.Print und GD.VarToStr.
Ausnahmen:
GDScript |
C# |
|---|---|
|
|
|
|
|
|
|
|
Tipps
Manchmal kann es nützlich sein, die Direktive using static zu verwenden. Diese Anweisung ermöglicht den Zugriff auf die Member 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");
}
}
Vollständige Liste der Äquivalenzen
Liste der Godot-Funktionen für den globalen Scope und ihre Entsprechung in C#:
GDScript |
C# |
|---|---|
abs |
Mathf.Abs |
absf |
Mathf.Abs |
absi |
Mathf.Abs |
acos |
Mathf.Acos |
acosh |
Mathf.Acosh |
angle_difference |
Mathf.AngleDifference |
asin |
Mathf.Asin |
asinh |
Mathf.Asinh |
atan |
Mathf.Atan |
atan2 |
Mathf.Atan2 |
atanh |
Mathf.Atanh |
bezier_derivative |
Mathf.BezierDerivative |
bezier_interpolate |
Mathf.BezierInterpolate |
bytes_to_var |
GD.BytesToVar |
bytes_to_var_with_objects |
GD.BytesToVarWithObjects |
ceil |
Mathf.Ceil |
ceilf |
Mathf.Ceil |
ceili |
Mathf.CeilToInt |
clamp |
Mathf.Clamp |
clampf |
Mathf.Clamp |
clampi |
Mathf.Clamp |
cos |
Mathf.Cos |
cosh |
Mathf.Cosh |
cubic_interpolate |
Mathf.CubicInterpolate |
cubic_interpolate_angle |
Mathf.CubicInterpolateAngle |
cubic_interpolate_angle_in_time |
Mathf.CubicInterpolateInTime |
cubic_interpolate_in_time |
Mathf.CubicInterpolateAngleInTime |
db_to_linear |
Mathf.DbToLinear |
deg_to_rad |
Mathf.DegToRad |
ease |
Mathf.Ease |
error_string |
Error.ToString |
exp |
Mathf.Exp |
floor |
Mathf.Floor |
floorf |
Mathf.Floor |
floori |
Mathf.FloorToInt |
fmod |
operator % |
fposmod |
Mathf.PosMod |
hash |
GD.Hash |
instance_from_id |
GodotObject.InstanceFromId |
inverse_lerp |
Mathf.InverseLerp |
is_equal_approx |
Mathf.IsEqualApprox |
is_finite |
Mathf.IsFinite oder float.IsFinite oder double.IsFinite |
is_inf |
Mathf.IsInf oder float.IsInfinity oder double.IsInfinity |
is_instance_id_valid |
GodotObject.IsInstanceIdValid |
is_instance_valid |
GodotObject.IsInstanceValid |
is_nan |
Mathf.IsNaN oder float.IsNaN oder double.IsNaN |
is_same |
operator == oder object.ReferenceEquals |
is_zero_approx |
Mathf.IsZeroApprox |
lerp |
Mathf.Lerp |
lerp_angle |
Mathf.LerpAngle |
lerpf |
Mathf.Lerp |
linear_to_db |
Mathf.LinearToDb |
Log |
Mathf.Log |
max |
Mathf.Max |
maxf |
Mathf.Max |
maxi |
Mathf.Max |
min |
Mathf.Min |
minf |
Mathf.Min |
mini |
Mathf.Min |
move_toward |
Mathf.MoveToward |
nearest_po2 |
Mathf.NearestPo2 |
pingpong |
Mathf.PingPong |
posmod |
Mathf.PosMod |
pow |
Mathf.Pow |
GD.Print |
|
print_rich |
GD.PrintRich |
print_verbose |
Verwenden Sie OS.IsStdoutVerbose und GD.Print |
printerr |
GD.PrintErr |
printraw |
GD.PrintRaw |
prints |
GD.PrintS |
printt |
GD.PrintT |
push_error |
GD.PushError |
push_warning |
GD.PushWarning |
rad_to_deg |
Mathf.RadToDeg |
rand_from_seed |
GD.RandFromSeed |
randf |
GD.Randf |
randf_range |
GD.RandRange |
randfn |
GD.Randfn |
randi |
GD.Randi |
randi_range |
GD.RandRange |
randomize |
GD.Randomize |
remap |
Mathf.Remap |
rid_allocate_id |
N/A |
rid_from_int64 |
N/A |
rotate_toward |
Mathf.RotateToward |
round |
Mathf.Round |
roundf |
Mathf.Round |
roundi |
Mathf.RoundToInt |
seed |
GD.Seed |
sign |
Mathf.Sign |
signf |
Mathf.Sign |
signi |
Mathf.Sign |
sin |
Mathf.Sin |
sinh |
Mathf.Sinh |
smoothstep |
Mathf.SmoothStep |
snapped |
Mathf.Snapped |
snappedf |
Mathf.Snapped |
snappedi |
Mathf.Snapped |
sqrt |
Mathf.Sqrt |
step_decimals |
Mathf.StepDecimals |
str |
Verwenden Sie $ string interpolation |
str_to_var |
GD.StrToVar |
tan |
Mathf.Tan |
tanh |
Mathf.Tanh |
type_convert |
Variant.As<T> or GD.Convert |
type_string |
Variant.Type.ToString |
typeof |
Variant.VariantType |
var_to_bytes |
GD.VarToBytes |
var_to_bytes_with_objects |
GD.VarToBytesWithObjects |
var_to_str |
GD.VarToStr |
weakref |
GodotObject.WeakRef |
wrap |
Mathf.Wrap |
wrapf |
Mathf.Wrap |
wrapi |
Mathf.Wrap |
Liste der GDScript-Utility-Funktionen und ihrer Entsprechung in C#:
GDScript |
C# |
|---|---|
assert |
|
char |
Use explicit conversion: |
convert |
GD.Convert |
dict_to_inst |
N/A |
get_stack |
|
inst_to_dict |
N/A |
len |
N/A |
load |
GD.Load |
preload |
N/A |
print_debug |
N/A |
print_stack |
GD.Print(System.Environment.StackTrace) |
range |
GD.Range oder System.Linq.Enumerable.Range |
type_exists |
ClassDB.ClassExists(type) |
Preload, wie es in GDScript funktioniert, ist in C# nicht verfügbar. Verwenden Sie stattdessen GD.Load oder ResourceLoader.Load.
@export-Annotation
Verwenden Sie das [Export]-Attribut anstelle der GDScript-@export-Annotation. Dieses Attribut kann auch mit optionalen PropertyHint und hintString-Parametern versehen werden. Defaultwerte können durch Zuweisung eines Wertes gesetzt werden.
Beispiel:
using Godot;
public partial 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;
}
Siehe auch: Exportierte Propertys in C#.
signal-Schlüsselwort
Verwenden Sie das [Signal]-Attribut, um ein Signal anstelle des GDScript-Schlüsselworts signal zu deklarieren. Dieses Attribut sollte für einen Delegate verwendet werden, dessen Namenssignatur zur Definition des Signals verwendet wird. Das Delegate muss das Suffix EventHandler haben, ein Event wird in der Klasse mit dem gleichen Namen erzeugt, aber ohne das Suffix, verwenden Sie den Namen dieses Events mit EmitSignal.
[Signal]
delegate void MySignalEventHandler(string willSendAString);
Siehe auch: C#-Signale.
@onready-Annotation
GDScript hat die Möglichkeit, die Initialisierung einer Member-Variable aufzuschieben, bis die Ready-Funktion mit @onready aufgerufen wird (vgl. @onready-Annotation). Zum Beispiel:
@onready var my_label = get_node("MyLabel")
C# verfügt jedoch nicht über diese Möglichkeit. Um den gleichen Effekt zu erzielen, müssen Sie dies tun.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
Singletons
Singletons sind als statische Klassen verfügbar, anstatt das Singleton-Pattern zu verwenden. Dadurch wird der Code weniger langatmig als bei einer Instance-Property.
Beispiel:
Input.IsActionPressed("ui_down")
In einigen sehr seltenen Fällen reicht dies jedoch nicht aus. Beispielsweise möchten Sie vielleicht auf einen Member aus der Basisklasse Godot.Object zugreifen, z.B. Connect. Für solche Anwendungsfälle stellen wir eine statische Property mit dem Namen Singleton bereit, von der die Singleton-Instanz zurückgegeben wird. Der Typ dieser Instanz ist Godot.Object.
Beispiel:
Input.Singleton.JoyConnectionChanged += Input_JoyConnectionChanged;
If you are developing main screen plugins, it is essential to note that
EditorInterface is not a static class in C#, unlike in GDScript.
Therefore, you must use the singleton pattern to obtain an instance of the
EditorInterface:
GDScript |
C# |
|---|---|
|
|
String
Verwenden Sie System.String (String). Die meisten String-Methoden von Godot haben eine Entsprechung in System.String oder werden von der Klasse StringExtensions als Erweiterungsmethoden bereitgestellt.
Beispiel:
string text = "Get up!";
string[] bigrams = text.Bigrams(); // ["Ge", "et", "t ", " u", "up", "p!"]
Strings sind in .NET unveränderlich, so dass alle Methoden, die einen String manipulieren, den ursprünglichen String nicht verändern und stattdessen einen neu erstellten String mit den vorgenommenen Änderungen zurückgeben. Um die Erstellung mehrerer String-Zuweisungen zu vermeiden, sollten Sie einen StringBuilder verwenden.
Liste der String-Methoden von Godot und ihre Entsprechung in C#:
GDScript |
C# |
|---|---|
begins_with |
|
bigrams |
StringExtensions.Bigrams |
bin_to_int |
StringExtensions.BinToInt |
c_escape |
StringExtensions.CEscape |
c_unescape |
StringExtensions.CUnescape |
capitalize |
StringExtensions.Capitalize |
casecmp_to |
StringExtensions.CasecmpTo oder StringExtensions.CompareTo (Erwägen Sie, string.Equals oder string.Compare zu verwenden) |
chr |
N/A |
contains |
|
count |
StringExtensions.Count (Consider using RegEx) |
countn |
StringExtensions.CountN (Erwägen Sie, RegEx zu verwenden) |
dedent |
StringExtensions.Dedent |
ends_with |
|
erase |
string.Remove (Erwägen Sie die Verwendung von StringBuilder zur Bearbeitung von Strings) |
find |
StringExtensions.Find (Erwägen Sie die Verwendung von string.IndexOf oder string.IndexOfAny) |
findn |
StringExtensions.FindN (Erwägen Sie die Verwendung von string.IndexOf oder string.IndexOfAny) |
Format |
Verwenden Sie $ string interpolation |
get_base_dir |
StringExtensions.GetBaseDir |
get_basename |
StringExtensions.GetBaseName |
get_extension |
StringExtensions.GetExtension |
get_file |
StringExtensions.GetFile |
get_slice |
N/A |
get_slice_count |
N/A |
get_slicec |
N/A |
hash |
StringExtensions.Hash (Erwägen Sie die Verwendung von object.GetHashCode, es sei denn, Sie müssen das gleiche Verhalten wie in GDScript garantieren) |
hex_decode |
StringExtensions.HexDecode (Erwägen Sie die Verwendung von System.Convert.FromHexString) |
hex_to_int |
StringExtensions.HexToInt (Erwägen Sie die Verwendung von int.Parse oder long.Parse mit System.Globalization.NumberStyles.HexNumber) |
humanize_size |
N/A |
indent |
StringExtensions.Indent |
insert |
string.Insert (Erwägen Sie die Verwendung von StringBuilder zur Bearbeitung von Strings) |
is_absolute_path |
StringExtensions.IsAbsolutePath |
is_empty |
|
is_relative_path |
StringExtensions.IsRelativePath |
is_subsequence_of |
StringExtensions.IsSubsequenceOf |
is_subsequence_ofn |
StringExtensions.IsSubsequenceOfN |
is_valid_filename |
StringExtensions.IsValidFileName |
is_valid_float |
StringExtensions.IsValidFloat (Erwägen Sie die Verwendung von float.TryParse oder double.TryParse) |
is_valid_hex_number |
StringExtensions.IsValidHexNumber |
is_valid_html_color |
StringExtensions.IsValidHtmlColor |
is_valid_identifier |
StringExtensions.IsValidIdentifier |
is_valid_int |
StringExtensions.IsValidInt (Erwägen Sie die Verwendung von int.TryParse oder long.TryParse) |
is_valid_ip_address |
StringExtensions.IsValidIPAddress |
join |
|
json_escape |
StringExtensions.JSONEscape |
left |
StringExtensions.Left (Consider using string.Substring or string.AsSpan) |
length |
|
lpad |
|
lstrip |
|
match |
StringExtensions.Match (Erwägen Sie die Verwendung von RegEx) |
matchn |
StringExtensions.MatchN (Erwägen Sie die Verwendung von RegEx) |
md5_buffer |
StringExtensions.Md5Buffer (Erwägen Sie die Verwendung von System.Security.Cryptography.MD5.HashData) |
md5_text |
StringExtensions.Md5Text (Erwägung der Verwendung von System.Security.Cryptography.MD5.HashData mit StringExtensions.HexEncode) |
naturalnocasecmp_to |
N/A (Erwägen Sie die Verwendung von string.Equals oder string.Compare) |
nocasecmp_to |
StringExtensions.NocasecmpTo oder StringExtensions.CompareTo (Erwägen Sie die Verwendung von string.Equals oder string.Compare) |
num |
|
num_int64 |
|
num_scientific |
|
num_uint64 |
|
pad_decimals |
StringExtensions.PadDecimals |
pad_zeros |
StringExtensions.PadZeros |
path_join |
StringExtensions.PathJoin |
repeat |
Verwenden Sie den String-Konstruktor oder einen StringBuilder |
replace |
string.Replace oder RegEx |
replacen |
StringExtensions.ReplaceN (Erwägen Sie die Verwendung von string.Replace oder RegEx) |
reverse |
N/A |
rfind |
StringExtensions.RFind (Erwägen Sie die Verwendung von string.LastIndexOf oder string.LastIndexOfAny) |
rfindn |
StringExtensions.RFindN (Erwägung der Verwendung von string.LastIndexOf oder string.LastIndexOfAny) |
right |
StringExtensions.Right (Erwägen Sie die Verwendung von string.Substring oder string.AsSpan) |
rpad |
|
rsplit |
N/A |
rstrip |
|
sha1_buffer |
StringExtensions.Sha1Buffer (Erwägen Sie die Verwendung von System.Security.Cryptography.SHA1.HashData) |
sha1_text |
StringExtensions.Sha1Text (Erwägung der Verwendung von System.Security.Cryptography.SHA1.HashData mit StringExtensions.HexEncode) |
sha256_buffer |
StringExtensions.Sha256Buffer (Erwägen Sie die Verwendung von System.Security.Cryptography.SHA256.HashData) |
sha256_text |
StringExtensions.Sha256Text (Erwägung der Verwendung von System.Security.Cryptography.SHA256.HashData mit StringExtensions.HexEncode) |
similarity |
StringExtensions.Similarity |
simplify_path |
StringExtensions.SimplifyPath |
split |
StringExtensions.Split (Erwägen Sie die Verwendung von string.Split) |
split_floats |
StringExtensions.SplitFloat |
strip_edges |
StringExtensions.StripEdges (Erwägen Sie die Verwendung von string.Trim, string.TrimStart oder string.TrimEnd) |
strip_escapes |
StringExtensions.StripEscapes |
substr |
StringExtensions.Substr (Erwägen Sie die Verwendung von string.Substring oder string.AsSpan) |
to_ascii_buffer |
StringExtensions.ToAsciiBuffer (Erwägen Sie die Verwendung von System.Text.Encoding.ASCII.GetBytes) |
to_camel_case |
StringExtensions.ToCamelCase |
to_float |
StringExtensions.ToFloat (Erwägen Sie die Verwendung von float.TryParse oder double.TryParse) |
to_int |
StringExtensions.ToInt (Erwägen Sie die Verwendung von int.TryParse oder long.TryParse) |
to_lower |
|
to_pascal_case |
StringExtensions.ToPascalCase |
to_snake_case |
StringExtensions.ToSnakeCase |
to_upper |
|
to_utf16_buffer |
StringExtensions.ToUtf16Buffer (Erwägen Sie die Verwendung von System.Text.Encoding.UTF16.GetBytes) |
to_utf32_buffer |
StringExtensions.ToUtf32Buffer (Erwägen Sie die Verwendung von System.Text.Encoding.UTF32.GetBytes) |
to_utf8_buffer |
StringExtensions.ToUtf8Buffer (Erwägen Sie die Verwendung von System.Text.Encoding.UTF8.GetBytes) |
to_wchar_buffer |
StringExtensions.ToUtf16Buffer unter Windows und StringExtensions.ToUtf32Buffer auf anderen Plattformen |
trim_prefix |
StringExtensions.TrimPrefix |
trim_suffix |
StringExtensions.TrimSuffix |
unicode_at |
string[int]-Indexer |
uri_decode |
StringExtensions.URIDecode (Erwägung Sie die Verwendung von System.Uri.UnescapeDataString) |
uri_encode |
StringExtensions.URIEncode (Erwägen Sie die Verwendung von System.Uri.EscapeDataString) |
validate_node_name |
StringExtensions.ValidateNodeName |
xml_escape |
StringExtensions.XMLEscape |
xml_unescape |
StringExtensions.XMLUnescape |
Liste der PackedByteArray-Methoden von Godot, die einen String erzeugen, und ihre C#-Entsprechung:
GDScript |
C# |
|---|---|
get_string_from_ascii |
StringExtensions.GetStringFromAscii (Erwägen Sie die Verwendung von System.Text.Encoding.ASCII.GetString) |
get_string_from_utf16 |
StringExtensions.GetStringFromUtf16 (Erwägen Sie die Verwendung von System.Text.Encoding.UTF16.GetString) |
get_string_from_utf32 |
StringExtensions.GetStringFromUtf32 (Erwägen Sie die Verwendung von System.Text.Encoding.UTF32.GetString) |
get_string_from_utf8 |
StringExtensions.GetStringFromUtf8 (Erwägen Sie der Verwendung von System.Text.Encoding.UTF8.GetString) |
hex_encode |
StringExtensions.HexEncode (Erwägen Sie die Verwendung von System.Convert.ToHexString) |
Bemerkung
.NET bietet Pfad-Utility-Methoden unter der Klasse System.IO.Path. Sie können nur mit nativen OS-Pfaden verwendet werden, nicht mit Godot-Pfaden (Pfade, die mit res:// oder user:// beginnen). Siehe Dateipfade in Godot-Projekten.
NodePath
Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Signal
Die folgenden Methoden wurden in Propertys konvertiert, deren jeweilige Namen geändert wurden:
GDScript |
C# |
|---|---|
|
|
|
|
Der Signal-Typ implementiert das awaitable-Pattern, was bedeutet, dass er mit dem Schlüsselwort await verwendet werden kann. Siehe Schlüsselwort await.
Anstatt den Signal-Typ zu verwenden, empfiehlt es sich, Godot-Signale in C# mit den generierten C#-Events zu nutzen. Siehe C#-Signale.
Callable
Die folgenden Methoden wurden in Propertys konvertiert, deren jeweilige Namen geändert wurden:
GDScript |
C# |
|---|---|
|
|
|
|
Derzeit unterstützt C# Callable, wenn eine der folgenden Bedingungen erfüllt ist:
Callablewurde unter Verwendung des C#-TypsCallableerstellt.Callableist eine Basisversion vonCallableder Engine. BenutzerdefinierteCallable``s werden nicht unterstützt. Ein ``Callableist benutzerdefiniert, wenn eine der folgenden Bedingungen erfüllt ist:Callablehat gebundene Informationen (Callable, die mitbind/unbinderzeugt wurden, werden nicht unterstützt).Callablewurde aus anderen Sprachen durch die GDExtension-API erstellt.
Einige Methoden wie bind und unbind sind nicht implementiert, verwenden Sie stattdessen Lambdas:
string name = "John Doe";
Callable callable = Callable.From(() => SayHello(name));
void SayHello(string name)
{
GD.Print($"Hello {name}");
}
Das Lambda fängt die Variable name ein, damit sie an die Methode SayHello gebunden werden kann.
RID
Dieser Typ wird in C# Rid genannt, um der .NET-Namenskonvention zu folgen.
Die folgenden Methoden wurden in Propertys konvertiert, deren jeweilige Namen geändert wurden:
GDScript |
C# |
|---|---|
|
|
|
|
Basis
Structs können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Basis() alle primitiven Member auf ihren Defaultwert. Verwenden Sie Basis.Identity anstelle von Basis() in GDScript und C++.
Die folgende Methode wurde in eine Property 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 Defaultwert. Bitte verwenden Sie Transform2D.Identity anstelle von Transform2D() in GDScript und C++.
Die folgenden Methoden wurden in Propertys konvertiert, deren jeweilige Namen geändert wurden:
GDScript |
C# |
|---|---|
|
|
|
|
|
|
Transform3D
Structs können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Transform3D() alle primitiven Member auf ihren Defaultwert. Bitte verwenden Sie Transform3D.Identity für die Entsprechung von Transform3D() in GDScript und C++.
Die folgenden Methoden wurden in Propertys konvertiert, deren jeweilige Namen geändert wurden:
GDScript |
C# |
|---|---|
|
|
|
|
Rect2
Das folgende Feld wurde in eine Eigenschaft mit einem etwas anderen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Rect2i
Dieser Typ wird in C# Rect2I genannt, um der .NET-Namenskonvention zu folgen.
Das folgende Feld wurde in eine Eigenschaft mit einem etwas anderen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
AABB
Dieser Typ wird in C# Aabb genannt, um der .NET-Namenskonvention zu folgen.
Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Quaternion
Strukturen können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Quaternion() alle primitiven Member auf ihren Defaultwert. Bitte verwenden Sie Quaternion.Identity für die Entsprechung von Quaternion() in GDScript und C++.
Projektion
Structs können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert new Quaternion() alle primitiven Member auf ihren Defaultwert. Bitte verwenden Sie Quaternion.Identity für die Entsprechung von Quaternion() in GDScript und C++.
Farbe
Structs können in C# keine parameterlosen Konstruktoren haben. Daher initialisiert neue Farbe() alle primitiven Member auf ihren Defaultwert (der die transparente schwarze Farbe darstellt). Bitte verwenden Sie Colors.Black für das Äquivalent von Color() in GDScript und C++.
Die globale Methode Color8, um eine Farbe aus Bytes zu konstruieren, ist als statische Methode im Typ Color verfügbar.
Die Farbkonstanten sind in der statischen Klasse Colors als schreibgeschützte Propertys verfügbar.
Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:
GDScript |
C# |
|---|---|
|
|
Die folgende Methode wurde in eine Methode mit einem anderen Namen umgewandelt:
GDScript |
C# |
|---|---|
|
|
Die folgenden Methoden sind als Konstruktoren verfügbar:
GDScript |
C# |
|---|---|
|
|
|
|
Array
Das Äquivalent von gepackten Arrays sind System.Array.
Siehe auch PackedArray in C#.
Verwenden Sie Godot.Collections.Array für ein untypisiertes Variant-Array. Godot.Collections.Array<T> ist ein typsicherer Wrapper um Godot.Collections.Array.
Siehe auch Array in C#.
Dictionary
Verwenden Sie Godot.Collections.Dictionary für ein untypisiertes Variant-Dictionary. Godot.Collections.Dictionary<TKey, TValue> ist ein typsicherer Wrapper um Godot.Collections.Dictionary.
Siehe auch Dictionary in C#.
Variant
Godot.Variant wird verwendet, um Godots nativen Typ Variant zu repräsentieren. Jeder Variant-kompatible Typ kann von/zu ihm konvertiert werden.
See also: C#-Variant.
Kommunikation mit anderen Skriptsprachen
Dies wird detailliert beschrieben in Cross-Language-Skripting.
Schlüsselwort await
Etwas Ähnliches wie das GDScript-Schlüsselwort await kann mit dem C# await-Schlüsselwort erreicht werden.
Das Schlüsselwort await in C# kann mit jedem await-kompatiblen Ausdruck verwendet werden. Es wird üblicherweise mit Operanden der Typen Task, Task<TResult>, ValueTask oder ValueTask<TResult> verwendet.
Ein Ausdruck t ist mit await kompatibel, wenn eine der folgenden Bedingungen erfüllt ist:
tist vom Compilezeittypdynamisch.that eine zugängliche Instanz oder Erweiterungsmethode mit dem NamenGetAwaiterohne Parameter und ohne Typparameter und einem RückgabetypA, für den alle folgenden Bedingungen gelten:Aimplementiert das InterfaceSystem.Runtime.CompilerServices.INotifyCompletion.Ahat eine zugängliche, lesbare Instanz-PropertyIsCompletedvom Typbool.Ahat eine zugängliche InstanzmethodeGetResultohne Parameter und ohne Typparameter.
Eine Entsprechung des Wartens auf ein Signal in GDScript kann mit dem Schlüsselwort await und GodotObject.ToSignal erreicht werden.
Beispiel:
public async Task SomeFunction()
{
await ToSignal(timer, Timer.SignalName.Timeout);
GD.Print("After timeout");
}