Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

C# API-Unterschiede zu GDScript

Dies ist eine (unvollständige) Liste von API-Unterschieden zwischen C# und GDScript.

Allgemeine Unterschiede

Wie in C#-Grundlagen erklärt, benutzt C# generell PascalCase anstatt von snake_case, welches in GDScript und C++ benutzt wird.

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#

TYPE_*

Variant.Type-Enum

OP_*

Variant.Operator-Enum

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#

weakref(obj)

GodotObject.WeakRef(obj)

instance_from_id(id)

GodotObject.InstanceFromId(id)

is_instance_id_valid(id)

GodotObject.IsInstanceIdValid(id)

is_instance_valid(obj)

GodotObject.IsInstanceValid(obj)

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

print

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

System.Diagnostics.Debug.Assert

char

Use explicit conversion: (char)65

convert

GD.Convert

dict_to_inst

N/A

get_stack

System.Environment.StackTrace

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;

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

string.StartsWith

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

string.Contains

count

StringExtensions.Count (Consider using RegEx)

countn

StringExtensions.CountN (Erwägen Sie, RegEx zu verwenden)

dedent

StringExtensions.Dedent

ends_with

string.EndsWith

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

string.IsNullOrEmpty oder string.IsNullOrWhiteSpace

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

string.Join

json_escape

StringExtensions.JSONEscape

left

StringExtensions.Left (Consider using string.Substring or string.AsSpan)

length

string.Length

lpad

string.PadLeft

lstrip

string.TrimStart

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

float.ToString oder double.ToString

num_int64

int.ToString oder long.ToString

num_scientific

float.ToString oder double.ToString

num_uint64

uint.ToString oder ulong.ToString

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

string.PadRight

rsplit

N/A

rstrip

string.TrimEnd

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

string.ToLower

to_pascal_case

StringExtensions.ToPascalCase

to_snake_case

StringExtensions.ToSnakeCase

to_upper

string.ToUpper

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)

  • .NET enthält viele Pfad-Utility-Methoden, die unter der Klasse System.IO.Path verfügbar sind und verwendet werden können, wenn es sich nicht um Godot-Pfade handelt (Pfade, die mit res:// oder user:// beginnen)

NodePath

Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:

GDScript

C#

is_empty()

IsEmpty

Signal

Die folgenden Methoden wurden in Propertys konvertiert, deren jeweilige Namen geändert wurden:

GDScript

C#

get_name()

Name

get_object()

Owner

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#

get_object()

Ziel

get_method()

Method

Derzeit unterstützt C# Callable, wenn eine der folgenden Bedingungen erfüllt ist:

  • Callable wurde unter Verwendung des C#-Typs Callable erstellt.

  • Callable ist eine Basisversion von Callable der Engine. Benutzerdefinierte Callable``s werden nicht unterstützt. Ein ``Callable ist benutzerdefiniert, wenn eine der folgenden Bedingungen erfüllt ist:

    • Callable hat gebundene Informationen (Callable, die mit bind/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#

get_id()

Id

is_valid()

IsValid

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#

get_scale()

Scale

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#

get_rotation()

Rotation

get_scale()

Scale

get_skew()

Skew

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#

get_rotation()

Rotation

get_scale()

Scale

Rect2

Das folgende Feld wurde in eine Eigenschaft mit einem etwas anderen Namen konvertiert:

GDScript

C#

end

End

Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:

GDScript

C#

get_area()

Area

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#

end

End

Die folgende Methode wurde in eine Property mit einem neuen Namen konvertiert:

GDScript

C#

get_area()

Area

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#

get_volume()

Volume

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#

get_luminance()

Luminance

Die folgende Methode wurde in eine Methode mit einem anderen Namen umgewandelt:

GDScript

C#

html(String)

FromHtml(ReadOnlySpan<char>)

Die folgenden Methoden sind als Konstruktoren verfügbar:

GDScript

C#

hex(int)

Color(uint)

hex64(int)

Color(ulong)

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/nach 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 Compilezeittyp dynamisch.

  • t hat eine zugängliche Instanz oder Erweiterungsmethode mit dem Namen GetAwaiter ohne Parameter und ohne Typparameter und einem Rückgabetyp A, für den alle folgenden Bedingungen gelten:

    • A implementiert das Interface System.Runtime.CompilerServices.INotifyCompletion.

    • A hat eine zugängliche, lesbare Instanz-Property IsCompleted vom Typ bool.

    • A hat eine zugängliche Instanzmethode GetResult 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");
}