Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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:
Callable
wurde unter Verwendung des C#-TypsCallable
erstellt.Callable
ist eine Basisversion vonCallable
der Engine. BenutzerdefinierteCallable``s werden nicht unterstützt. Ein ``Callable
ist benutzerdefiniert, wenn eine der folgenden Bedingungen erfüllt ist:Callable
hat gebundene Informationen (Callable
, die mitbind
/unbind
erzeugt wurden, werden nicht unterstützt).Callable
wurde 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:
t
ist vom Compilezeittypdynamisch
.t
hat eine zugängliche Instanz oder Erweiterungsmethode mit dem NamenGetAwaiter
ohne Parameter und ohne Typparameter und einem RückgabetypA
, für den alle folgenden Bedingungen gelten:A
implementiert das InterfaceSystem.Runtime.CompilerServices.INotifyCompletion
.A
hat eine zugängliche, lesbare Instanz-PropertyIsCompleted
vom Typbool
.A
hat eine zugängliche InstanzmethodeGetResult
ohne 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");
}