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...
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
As explained in Différences générales entre C# et GDScript, PascalCase
is used
to access Godot APIs in C# instead of the snake_case
used by GDScript and
C++. Where possible, fields and getters/setters have been converted to
properties. In general, the C# Godot API strives to be as idiomatic as is
reasonably possible. See the Guide de style C#, which we encourage
you to also use for your own C# code.
In GDScript, the setters/getters of a property can be called directly, although
this is not encouraged. In C#, only the property is defined. For example, to
translate the GDScript code x.set_name("Friend")
to C#, write
x.Name = "Friend";
.
A C# IDE will provide intellisense, which is extremely useful when figuring out renamed C# APIs. The built-in Godot script editor has no support for C# intellisense, and it also doesn't provide many other C# development tools that are considered essential. See Configuration d'un éditeur externe.
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
In C#, only primitive types can be constant. For example, the TAU
constant
is replaced by the Mathf.Tau
constant, but the Vector2.RIGHT
constant
is replaced by the Vector2.Right
read-only property. This behaves similarly
to a constant, but can't be used in some contexts like switch
statements.
Global enum constants were moved to their own enums.
For example, ERR_*
constants were moved to the Error
enum.
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
.
C# also provides static System.Math and System.MathF classes that may contain other useful mathematical operations.
Fonctions aléatoires
Les fonctions globales aléatoires, comme rand_range
et rand_seed
, se trouvent sous GD
. Exemple : GD.RandRange
et GD.RandSeed
.
Consider using System.Random or, if you need cryptographically strong randomness, System.Security.Cryptography.RandomNumberGenerator.
Autres fonctions
Many other global functions like print
and var_to_str
are located under GD
.
Example: GD.Print
and GD.VarToStr
.
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");
}
}
Full list of equivalences
List of Godot's global scope functions and their equivalent 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 |
plafond |
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 |
facilité |
Mathf.Ease |
error_string |
Error.ToString |
exp |
Mathf.Exp |
floor |
Mathf.Floor |
floorf |
Mathf.Floor |
floori |
Mathf.FloorToInt |
fmod |
operator % |
fposmod |
Mathf.PosMod |
hachage |
GD.Hash |
instance_from_id |
GodotObject.InstanceFromId |
inverse_lerp |
Mathf.InverseLerp |
is_equal_approx |
Mathf.IsEqualApprox |
is_finite |
Mathf.IsFinite ou float.IsFinite ou double.IsFinite |
is_inf |
Mathf.IsInf ou float.IsInfinity ou double.IsInfinity |
is_instance_id_valid |
GodotObject.IsInstanceIdValid |
is_instance_valid |
GodotObject.IsInstanceValid |
is_nan |
Mathf.IsNaN ou float.IsNaN ou double.IsNaN |
is_same |
operator == ou 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 |
Utilisez OS.IsStdoutVerbose et 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 |
graine |
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 |
|
str_to_var |
GD.StrToVar |
tan |
Mathf.Tan |
tanh |
Mathf.Tanh |
type_convert |
Variant.As<T> ou 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 |
List of GDScript utility functions and their equivalent in C#:
GDScript |
C# |
---|---|
assert |
|
char |
Utilisez la conversion explicite : |
Convertir |
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 ou System.Linq.Enumerable.Range |
type_exists |
ClassDB.ClassExists(type) |
preload
, comme il fonctionne en GDScript, n'est pas disponible en C#. Utilisez GD.Load
ou ResourceLoader.Load
à la place.
@export
annotation
Use the [Export]
attribute instead of the GDScript @export
annotation.
This attribute can also be provided with optional PropertyHint and hintString
parameters.
Default values can be set by assigning a value.
Exemple :
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;
}
Voir aussi : C# exported properties.
signal
keyword
Use the [Signal]
attribute to declare a signal instead of the GDScript signal
keyword.
This attribute should be used on a delegate, whose name signature will be used to define the signal.
The delegate must have the EventHandler
suffix, an event will be generated in the class with the same name but without the suffix, use that event's name with EmitSignal
.
[Signal]
delegate void MySignalEventHandler(string willSendAString);
Voir aussi : Signaux C#.
annotation @onready
GDScript has the ability to defer the initialization of a member variable until the ready function is called with @onready (cf. L'annotation @onready). For example:
@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")
However, in some very rare cases this is not enough. For example, you may want
to access a member from the base class GodotObject
, like Connect
.
For such use cases we provide a static property named Singleton
that returns
the singleton instance. The type of this instance is GodotObject
.
Exemple :
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# |
---|---|
|
|
Chaîne de caractères
Use System.String
(string
). Most of Godot's String methods have an
equivalent in System.String
or are provided by the StringExtensions
class as extension methods.
Exemple :
string text = "Get up!";
string[] bigrams = text.Bigrams(); // ["Ge", "et", "t ", " u", "up", "p!"]
Strings are immutable in .NET, so all methods that manipulate a string don't modify the original string and return a newly created string with the modifications applied. To avoid creating multiple string allocations consider using a StringBuilder.
List of Godot's String methods and their equivalent in C#:
GDScript |
C# |
---|---|
begins_with |
|
bigrammes |
StringExtensions.Bigrams |
bin_to_int |
StringExtensions.BinToInt |
c_escape |
StringExtensions.CEscape |
c_unescape |
StringExtensions.CUnescape |
capitalize |
StringExtensions.Capitalize |
casecmp_to |
StringExtensions.CasecmpTo or StringExtensions.CompareTo (Consider using string.Equals or string.Compare) |
chr |
N/A |
contains |
|
count |
StringExtensions.Count (Considérez d'utiliser RegEx) |
countn |
StringExtensions.CountN (Considérez d'utiliser RegEx) |
dedent |
StringExtensions.Dedent |
ends_with |
|
erase |
string.Remove (Consider using StringBuilder to manipulate strings) |
Trouver |
StringExtensions.Find (Considérez d'utiliser string.IndexOf ou string.IndexOfAny) |
findn |
StringExtensions.FindN (Considérez d'utiliser string.IndexOf ou string.IndexOfAny) |
format |
|
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 |
hachage |
StringExtensions.Hash (Consider using object.GetHashCode unless you need to guarantee the same behavior as in GDScript) |
hex_decode |
StringExtensions.HexDecode (Considérez d'utiliser System.Convert.FromHexString) |
hex_to_int |
StringExtensions.HexToInt (Consider using int.Parse or long.Parse with System.Globalization.NumberStyles.HexNumber) |
humanize_size |
N/A |
indent |
StringExtensions.Indent |
insert |
string.Insert (Consider using StringBuilder to manipulate 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 (Considérez d'utiliser float.TryParse ou double.TryParse) |
is_valid_hex_number |
StringExtensions.IsValidHexNumber |
is_valid_html_color |
StringExtensions.IsValidHtmlColor |
is_valid_identifier |
StringExtensions.IsValidIdentifier |
is_valid_int |
StringExtensions.IsValidInt (Considérez d'utiliser int.TryParse ou long.TryParse) |
is_valid_ip_address |
StringExtensions.IsValidIPAddress |
joindre |
|
json_escape |
StringExtensions.JSONEscape |
Gauche |
StringExtensions.Left (Considérez string.Substring ou string.AsSpan) |
length |
|
Ipad |
|
lstrip |
|
match |
StringExtensions.Match (Considérez utiliser`RegEx`_) |
matchn |
StringExtensions.MatchN (Considérez utiliser`RegEx`_) |
md5_buffer |
StringExtensions.Md5Buffer (Considérez utiliser System.Security.Cryptography.MD5.HashData) |
md5_text |
StringExtensions.Md5Text (Considérez d'utiliser System.Security.Cryptography.MD5.HashData avec StringExtensions.HexEncode) |
naturalnocasecmp_to |
N/A (Considérez d'utiliser string.Equals ou string.Compare) |
nocasecmp_to |
StringExtensions.NocasecmpTo or StringExtensions.CompareTo (Consider using string.Equals or string.Compare) |
num |
|
num_int64 |
|
num_scientific |
|
num_uint64 |
|
pad_decimals |
StringExtensions.PadDecimals |
pad_zeros |
StringExtensions.PadZeros |
path_join |
StringExtensions.PathJoin |
repeat |
Utilisez string constructor ou un StringBuilder |
replace |
|
replacen |
StringExtensions.ReplaceN (Considérez d'utiliser string.Replace ou RegEx) |
reverse |
N/A |
rfind |
StringExtensions.RFind (Considérez d'utiliser string.LastIndexOf ou string.LastIndexOfAny) |
rfindn |
StringExtensions.RFindN (Considérez d'utiliser string.LastIndexOf ou string.LastIndexOfAny) |
right |
StringExtensions.Right (Considérez d'utiliser string.Substring ou string.AsSpan) |
rpad |
|
rsplit |
N/A |
rstrip |
|
sha1_buffer |
StringExtensions.Sha1Buffer (Considérez utiliser System.Security.Cryptography.SHA1.HashData) |
sha1_text |
StringExtensions.Sha1Text (Considérez d'utiliser System.Security.Cryptography.SHA1.HashData avec StringExtensions.HexEncode) |
sha256_buffer |
StringExtensions.Sha256Buffer (Considérez utiliser System.Security.Cryptography.SHA256.HashData) |
sha256_text |
StringExtensions.Sha256Text (Considérez d'utiliser System.Security.Cryptography.SHA256.HashData avec StringExtensions.HexEncode) |
similarité |
StringExtensions.Similarity |
simplify_path |
StringExtensions.SimplifyPath |
Séparer |
StringExtensions.Split (Considérez utiliser string.Split) |
split_floats |
StringExtensions.SplitFloat |
strip_edges |
StringExtensions.StripEdges (Consider using string.Trim, string.TrimStart or string.TrimEnd) |
strip_escapes |
StringExtensions.StripEscapes |
substr |
StringExtensions.Substr (Considérez string.Substring ou string.AsSpan) |
to_ascii_buffer |
StringExtensions.ToAsciiBuffer (Considérez utiliser System.Text.Encoding.ASCII.GetBytes) |
to_camel_case |
StringExtensions.ToCamelCase |
to_float |
StringExtensions.ToFloat (Considérez d'utiliser float.TryParse ou double.TryParse) |
to_int |
StringExtensions.ToInt (Considérez d'utiliser int.TryParse ou long.TryParse) |
to_lower |
|
to_pascal_case |
StringExtensions.ToPascalCase |
to_snake_case |
StringExtensions.ToSnakeCase |
to_upper |
|
to_utf16_buffer |
StringExtensions.ToUtf16Buffer (Considérez utiliser System.Text.Encoding.UTF16.GetBytes) |
to_utf32_buffer |
StringExtensions.ToUtf32Buffer (Considérez utiliser System.Text.Encoding.UTF32.GetBytes) |
to_utf8_buffer |
StringExtensions.ToUtf8Buffer (Considérez utiliser System.Text.Encoding.UTF8.GetBytes) |
to_wchar_buffer |
StringExtensions.ToUtf16Buffer in Windows and StringExtensions.ToUtf32Buffer in other platforms |
trim_prefix |
StringExtensions.TrimPrefix |
trim_suffix |
StringExtensions.TrimSuffix |
unicode_at |
string[int] indexer |
uri_decode |
StringExtensions.URIDecode (Considérez utiliser`System.Uri.UnescapeDataString`_) |
uri_encode |
StringExtensions.URIEncode (Considérez utiliser System.Uri.EscapeDataString) |
validate_node_name |
StringExtensions.ValidateNodeName |
xml_escape |
StringExtensions.XMLEscape |
xml_unescape |
StringExtensions.XMLUnescape |
List of Godot's PackedByteArray methods that create a String and their C# equivalent:
GDScript |
C# |
---|---|
get_string_from_ascii |
StringExtensions.GetStringFromAscii (Considérez utiliser`System.Text.Encoding.ASCII.GetString`_) |
get_string_from_utf16 |
StringExtensions.GetStringFromUtf16 (Considérez utiliser System.Text.Encoding.UTF16.GetString) |
get_string_from_utf32 |
StringExtensions.GetStringFromUtf32 (Considérez utiliser System.Text.Encoding.UTF32.GetString) |
get_string_from_utf8 |
StringExtensions.GetStringFromUtf8 (Considérez utiliser System.Text.Encoding.UTF8.GetString) |
hex_encode |
StringExtensions.HexEncode (Considérez utiliser System.Convert.ToHexString) |
Note
.NET provides path utility methods under the
System.IO.Path
class. They can only be used with native OS paths, not Godot paths
(paths that start with res://
or user://
).
See Chemins d'accès aux fichiers dans les projets Godot.
NodePath
La méthode suivante a été convertie en une propriété avec un nom différent :
GDScript |
C# |
---|---|
|
|
Signaux
Les méthodes suivantes ont été converties en propriétés avec leurs noms respectifs modifiés :
GDScript |
C# |
---|---|
|
|
|
|
The Signal
type implements the awaitable pattern which means it can be used with
the await
keyword. See await keyword.
Instead of using the Signal
type, the recommended way to use Godot signals in C# is
to use the generated C# events. See Signaux C#.
Callable
Les méthodes suivantes ont été converties en propriétés avec leurs noms respectifs modifiés :
GDScript |
C# |
---|---|
|
|
|
|
Currently C# supports Callable
if one of the following holds:
Callable
was created using the C#Callable
type.Callable
is a basic version of the engine'sCallable
. CustomCallable
s are unsupported. ACallable
is custom when any of the following holds:Callable
has bound information (Callable
s created withbind
/unbind
are unsupported).Callable
was created from other languages through the GDExtension API.
Some methods such as bind
and unbind
are not implemented, use lambdas instead:
string name = "John Doe";
Callable callable = Callable.From(() => SayHello(name));
void SayHello(string name)
{
GD.Print($"Hello {name}");
}
The lambda captures the name
variable so it can be bound to the SayHello
method.
RID
This type is named Rid
in C# to follow the .NET naming convention.
Les méthodes suivantes ont été converties en propriétés avec leurs noms respectifs modifiés :
GDScript |
C# |
---|---|
|
|
|
|
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# |
---|---|
|
|
|
|
|
|
Transform3D
Les Structs ne peuvent pas avoir de constructeurs sans paramètres en C#, c'est pourquoi new Transform3D()
initialise tous les membres primitifs à leur valeur par défaut. Veuillez utiliser Transform3D.Identity
pour l'équivalent de Transform3D()
en GDScript et C++.
Les méthodes suivantes ont été converties en propriétés avec leurs noms respectifs modifiés :
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# |
---|---|
|
|
Rect2i
This type is named Rect2I
in C# to follow the .NET naming convention.
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# |
---|---|
|
|
AABB
This type is named Aabb
in C# to follow the .NET naming convention.
La méthode suivante a été convertie en une propriété avec un nom différent :
GDScript |
C# |
---|---|
|
|
Quaternion
Structs cannot have parameterless constructors in C#. Therefore, new Quaternion()
initializes all primitive members to their default value.
Please use Quaternion.Identity
for the equivalent of Quaternion()
in GDScript and C++.
Projection
Structs cannot have parameterless constructors in C#. Therefore, new Projection()
initializes all primitive members to their default value.
Please use Projection.Identity
for the equivalent of Projection()
in GDScript and C++.
Couleur
Structs cannot have parameterless constructors in C#. Therefore, new Color()
initializes all primitive members to their default value (which represents the transparent black color).
Please use Colors.Black
for the equivalent of Color()
in GDScript and C++.
The global Color8
method to construct a Color from bytes is available as a static method
in the Color type.
The Color constants are available in the Colors
static class as readonly properties.
La méthode suivante a été convertie en une propriété avec un nom différent :
GDScript |
C# |
---|---|
|
|
The following method was converted to a method with a different name:
GDScript |
C# |
---|---|
|
|
The following methods are available as constructors:
GDScript |
C# |
---|---|
|
|
|
|
Tableau
The equivalent of packed arrays are System.Array
.
Voir aussi PackedArray in C#.
Use Godot.Collections.Array
for an untyped Variant
array.
Godot.Collections.Array<T>
is a type-safe wrapper around Godot.Collections.Array
.
Voir aussi : Tableau en C#.
Dictionnaire
Use Godot.Collections.Dictionary
for an untyped Variant
dictionary.
Godot.Collections.Dictionary<TKey, TValue>
is a type-safe wrapper around Godot.Collections.Dictionary
.
Voir aussi Dictionnaire en C#.
Variant
Godot.Variant
is used to represent Godot's native Variant type.
Any Variant-compatible type can be converted from/to it.
Voir aussi : C# Variant.
Communiquer avec d'autres langages de script
Ceci est expliqué en détail dans Scripting multi-langage.
await
keyword
Something similar to GDScript's await
keyword can be achieved with C#'s
await keyword.
The await
keyword in C# can be used with any awaitable expression. It's commonly
used with operands of the types Task, Task<TResult>, ValueTask, or ValueTask<TResult>.
An expression t
is awaitable if one of the following holds:
t
is of compile-time typedynamic
.t
has an accessible instance or extension method calledGetAwaiter
with no parameters and no type parameters, and a return typeA
for which all of the following hold:A
implémente l'interfaceSystem.Runtime.CompilerServices.INotifyCompletion
.A
has an accessible, readable instance propertyIsCompleted
of typebool
.A
has an accessible instance methodGetResult
with no parameters and no type parameters.
An equivalent of awaiting a signal in GDScript can be achieved with the await
keyword and
GodotObject.ToSignal
.
Exemple :
public async Task SomeFunction()
{
await ToSignal(timer, Timer.SignalName.Timeout);
GD.Print("After timeout");
}