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.

C# API 與 GDScript 的不同

以下是 C# 與 GDScript 之間 API 差異的(不完整)清單。

一般差異

C# 與 GDScript 的主要差異 所述,在 C# 中存取 Godot API 時,會使用 PascalCase,而不是 GDScript 與 C++ 常見的 snake_case。欄位與 getter/setter 皆盡可能轉為屬性。整體而言,C# Godot API 力求貼近 C# 慣用寫法。請參考 C# 風格指南,我們也建議你的 C# 程式碼遵循該風格指南。

在 GDScript 中,屬性的 setter/getter 可以被直接呼叫(雖然不建議這麼做)。但在 C# 中,只會定義屬性。例如,將 GDScript 代碼 x.set_name("Friend") 轉寫為 C# 時,應為 x.Name = "Friend";

C# 的 IDE(整合式開發環境)通常會提供 IntelliSense(自動補全),對於查找 C# API 名稱的變更非常有幫助。Godot 內建的腳本編輯器不支援 C# IntelliSense,且也缺少許多 C# 開發所需的重要工具。請參閱 設定外部編輯器

全域作用域

全域函式與一些常數被移到類別裡了,因為 C# 不允許在命名空間中定義這些函式與常數。大部分全域常數都被移到各自的列舉型別中了。

常數

在 C# 中,只有基本型別可以是常數。例如,TAU 常數被替換為 Mathf.Tau 常數,但是 Vector2.RIGHT 常數被替換為 Vector2.Right 唯讀屬性。這與常數的行為類似,但不能用於一些本文中,如 switch 敘述。

全域常數移至其各自的列舉型別。例如, ERR_* 常數移動到了 Error 列舉類型中。

特例:

GDScript

C#

TYPE_*

Variant.Type 列舉型別

OP_*

Variant.Operator 列舉型別

數學函式

數學全域函式,如 abs, acos, asin, atanatan2,都放在了 Mathf 下,命名為 Abs, Acos, Asin, AtanAtan2PI 常數則為 Mathf.Pi

C# 也提供靜態 System.MathSystem.MathF 類,它們可能包含其他有用的數學運算。

隨機數函式

隨機數全域函式,如 rand_rangerand_seed ,都放在 GD 底下。如: GD.RandRangeGD.RandSeed

請考慮使用 System.Random,若需要密碼學等級的隨機數,則可使用 System.Security.Cryptography.RandomNumberGenerator

其他函式

許多其他的全域函式,如 printvar2str 都放在 GD 底下。如 GD.PrintGD.Var2Str

例外:

GDScript

C#

weakref(obj)

Object.WeakRef(obj)

is_instance_valid(obj)

Object.IsInstanceValid(obj)

is_instance_valid(obj)

Object.IsInstanceValid(obj)

is_instance_valid(obj)

Object.IsInstanceValid(obj)

提示

有時候,使用 using static 指示詞也很有用。使用這個指示詞就可以存取類別的成員與巢狀型別而無需指定類別名稱。

範例:

using static Godot.GD;

public class Test
{
    static Test()
    {
        Print("Hello"); // Instead of GD.Print("Hello");
    }
}

完整的定義列表

Godot 的全域作用域函式及其在 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 or float.IsFinite or double.IsFinite

is_inf

Mathf.IsInf 或 float.IsInfinitydouble.IsInfinity

is_instance_id_valid

GodotObject.IsInstanceIdValid

is_instance_valid

GodotObject.IsInstanceValid

is_nan

Mathf.IsNaN or float.IsNaN or double.IsNaN

is_same

運算子 == 或 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

最大值

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

使用 OS.IsStdoutVerbose 與 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

使用 $ 字串內插

str_to_var

GD.StrToVar

tan

Mathf.Tan

tanh

Mathf.Tanh

type_convert

Variant.As<T> 或 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

GDScript 常用工具函式及其在 C# 中的對應:

GDScript

C#

assert

System.Diagnostics.Debug.Assert

char

使用顯式轉型:(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 or System.Linq.Enumerable.Range

type_exists

ClassDB.ClassExists(type)

在 GDScript 中可用的 preload 無法於 C# 中使用。請使用 GD.LoadResourceLoader.Load 代替。

@export 註釋

使用 [Export] 屬性來取代 GDScript 中的 export 關鍵字。這個屬性也可以加上可選的 PropertyHinthintString 參數。預設值可以通過指派數值來設定。

範例:

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;
}

另請參見:C# 匯出屬性

signal 關鍵字

請使用 [Signal] 屬性來宣告訊號,取代 GDScript 的 signal 關鍵字。這個屬性應加在 delegate 上,其名稱簽名會用來定義訊號。該 delegate 必須以 EventHandler 為結尾,類別中會自動生成同名但去除該結尾的 event,之後可用該 event 名稱搭配 EmitSignal 發送。

[Signal]
delegate void MySignalEventHandler(string willSendAString);

另請參見:C# 訊號

@onready 註釋

GDScript 支援使用 @onready`(請參考 :ref:`doc_gdscript_onready_annotation)延遲成員變數的初始化,直到 ready 函式被呼叫。例如:

@onready var my_label = get_node("MyLabel")

然而C#沒有這個能力. 為了達到同樣的效果, 你需要這樣做.

private Label _myLabel;

public override void _Ready()
{
    _myLabel = GetNode<Label>("MyLabel");
}

單例

單例為靜態類別,而不是使用單例模式。這樣可以讓程式碼比起使用 Instance 屬性來得簡單。

範例:

Input.IsActionPressed("ui_down")

但,在某些罕見情況下,這樣還不夠。如,我們可能需要存取基礎型別 Godot.Object 中的成員,如 Connect 。這種情況下,可以使用一個靜態屬性,名為 Singleton ,這個屬性會回傳單例實體。該實體的型別為 Godot.Object

範例:

Input.Singleton.JoyConnectionChanged += Input_JoyConnectionChanged;

若你正在開發主畫面插件,請特別注意 EditorInterface 在 C# 中並非靜態類別(不像在 GDScript 中)。因此,必須透過單例模式來取得 EditorInterface 實例:

GDScript

C#

EditorInterface

EditorInterface.Singleton

字串

使用 System.String (string) 。大多數 Godot 的字串方法都由 StringExtensions 類別作為擴充方法提供。

請注意,C# 的字串使用 UTF-16 編碼,而 Godot 的 String 使用 UTF-32 編碼。

範例:

string text = "Get up!";
string[] bigrams = text.Bigrams(); // ["Ge", "et", "t ", " u", "up", "p!"]

.NET 中的字串為不可變物件,因此所有操作字串的方法都不會改變原本的字串,而是回傳一個修改後的新字串。為避免頻繁產生新的字串物件,建議使用 StringBuilder 來優化效能。

Godot 的 String 方法及其在 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 或 StringExtensions.CompareTo(考慮使用 string.Equalsstring.Compare

chr

N/A

continue

string.Contains

count

StringExtensions.Count(考慮使用 RegEx

countn

StringExtensions.CountN(考慮使用 RegEx

dedent

StringExtensions.Dedent

ends_with

string.EndsWith

erase

string.Remove (考慮使用 StringBuilder 來操作字串)

find

StringExtensions.Find(考慮使用 string.IndexOfstring.IndexOfAny

findn

StringExtensions.FindN(考慮使用 string.IndexOfstring.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

hash

StringExtensions.Hash(考慮使用 object.GetHashCode 除非您需要保證與 GDScript 中相同的行為)

hex_decode

StringExtensions.HexDecode(建議可使用 System.Convert.FromHexString

hex_to_int

StringExtensions.HexToInt(考慮將 int.Parselong.ParseSystem.Globalization.NumberStyles.HexNumber 一起使用)

humanize_size

N/A

indent

StringExtensions.Indent

insert

string.Insert (考慮使用 StringBuilder 來操作字串)

is_absolute_path

StringExtensions.IsAbsolutePath

is_empty

string.IsNullOrEmptystring.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(請考慮使用 float.TryParsedouble.TryParse

is_valid_hex_number

StringExtensions.IsValidHexNumber

is_valid_html_color

StringExtensions.IsValidHtmlColor

識別項

StringExtensions.IsValidIdentifier

is_valid_int

StringExtensions.IsValidInt(請考慮使用 int.TryParselong.TryParse

is_valid_ip_address

StringExtensions.IsValidIPAddress

join

string.Join

json_escape

StringExtensions.JSONEscape

left

StringExtensions.Left(請考慮使用 string.Substringstring.AsSpan

每行字數限制

string.Length

lpad

string.PadLeft

字串

string.TrimStart

match

StringExtensions.Match(請考慮使用 RegEx

match

StringExtensions.MatchN(請考慮使用 RegEx

md5_buffer

StringExtensions.Md5Buffer(請考慮使用 System.Security.Cryptography.MD5.HashData

md5_text

StringExtensions.Md5Text(請考慮使用 System.Security.Cryptography.MD5.HashData 和 StringExtensions.HexEncode)

naturalnocasecmp_to

N/A(請考慮使用 string.Equalsstring.Compare

nocasecmp_to

StringExtensions.NocasecmpTo 或 StringExtensions.CompareTo(請考慮使用 string.Equalsstring.Compare

num

float.ToStringdouble.ToString

num_int64

int.ToStringlong.ToString

num_scientific

float.ToStringdouble.ToString

num_uint64

uint.ToStringulong.ToString

pad_decimals

StringExtensions.PadDecimals

pad_zeros

StringExtensions.PadZeros

path_join

StringExtensions.PathJoin

重覆

請使用 string constructorStringBuilder

取代

string.ReplaceRegEx

取代

StringExtensions.ReplaceN(請考慮使用 string.ReplaceRegEx

reverse

N/A

rfind

StringExtensions.RFind(請考慮使用 string.LastIndexOfstring.LastIndexOfAny

rfindn

StringExtensions.RFindN(請考慮使用 string.LastIndexOfstring.LastIndexOfAny

光照

StringExtensions.Right(請考慮使用 string.Substringstring.AsSpan

rpad

string.PadRight

rsplit

N/A

字串

string.TrimEnd

sha1_buffer

StringExtensions.Sha1Buffer(請考慮使用 System.Security.Cryptography.SHA1.HashData

sha1_text

StringExtensions.Sha1Text(請考慮使用 System.Security.Cryptography.SHA1.HashData 和 StringExtensions.HexEncode)

sha256_buffer

StringExtensions.Sha256Buffer(請考慮使用 System.Security.Cryptography.SHA256.HashData

sha256_text

StringExtensions.Sha256Text(請考慮使用 System.Security.Cryptography.SHA256.HashData 和 StringExtensions.HexEncode)

similarity

StringExtensions.Similarity

simplify_path

StringExtensions.SimplifyPath

split

StringExtensions.Split(請考慮使用 string.Split

split_floats

StringExtensions.SplitFloat

strip_edges

StringExtensions.StripEdges(請考慮使用 string.Trimstring.TrimStartstring.TrimEnd

strip_escapes

StringExtensions.StripEscapes

substr

StringExtensions.Substr(請考慮使用 string.Substringstring.AsSpan

to_ascii_buffer

StringExtensions.ToAsciiBuffer(請考慮使用 System.Text.Encoding.ASCII.GetBytes

to_camel_case

StringExtensions.ToCamelCase

浮點數

StringExtensions.ToFloat(請考慮使用 float.TryParsedouble.TryParse

to_int

StringExtensions.ToInt(請考慮使用 int.TryParselong.TryParse

to_lower

string.ToLower

to_pascal_case

StringExtensions.ToPascalCase

to_snake_case

StringExtensions.ToSnakeCase

to_upper

string.ToUpper

to_utf16_buffer

StringExtensions.ToUtf16Buffer(請考慮使用 System.Text.Encoding.UTF16.GetBytes

to_utf32_buffer

StringExtensions.ToUtf32Buffer(請考慮使用 System.Text.Encoding.UTF32.GetBytes

to_utf8_buffer

StringExtensions.ToUtf8Buffer(請考慮使用 System.Text.Encoding.UTF8.GetBytes

to_wchar_buffer

Windows 請用 StringExtensions.ToUtf16Buffer,其它平台請用 StringExtensions.ToUtf32Buffer

trim_prefix

StringExtensions.TrimPrefix

trim_suffix

StringExtensions.TrimSuffix

unicode_at

string[int] 索引器

uri_decode

StringExtensions.URIDecode(考慮使用 System.Uri.UnescapeDataString

uri_encode

StringExtensions.URIEncode(建議可使用 System.Uri.EscapeDataString

validate_node_name

StringExtensions.ValidateNodeName

xml_escape

StringExtensions.XMLEscape

xml_unescape

StringExtensions.XMLUnescape

用於建立 String 的 Godot 的 PackedByteArray 方法及其 C# 等效方法的列表:

GDScript

C#

get_string_from_ascii

StringExtensions.GetStringFromAscii(考慮使用 System.Text.Encoding.ASCII.GetString

get_string_from_utf16

StringExtensions.GetStringFromUtf16(建議可使用 System.Text.Encoding.UTF16.GetString

get_string_from_utf32

StringExtensions.GetStringFromUtf32(建議可使用 System.Text.Encoding.UTF32.GetString

get_string_from_utf8

StringExtensions.GetStringFromUtf8(考慮使用 System.Text.Encoding.UTF8.GetString

hex_encode

StringExtensions.HexEncode(建議可使用 System.Convert.ToHexString

備註

.NET 提供許多路徑工具方法於 System.IO.Path 類別下。這些方法僅適用於作業系統原生路徑,不適用於 Godot 路徑(即以 res://user:// 開頭的路徑)。詳見 Godot 專案中的檔路徑

NodePath

下列方法轉換成了名稱不同的屬性:

GDScript

C#

center()

IsEmpty

訊號

下列各個方法皆轉換為屬性並更改其名稱:

GDScript

C#

get_area()

Name

get_area()

Owner

Signal 類型實作了可等待(awaitable)模式,代表其可搭配 await 關鍵字使用。詳見 Onready 關鍵字

在 C# 中,建議使用自動產生的 C# 事件來處理 Godot 訊號,而不是直接使用 Signal 類型。請參考 C# 訊號

Call 呼叫

下列各個方法皆轉換為屬性並更改其名稱:

GDScript

C#

get_area()

目標

get_method()

Method

目前,如果滿足以下條件之一,C# 支援「Callable」:

  • Callable 是使用 C# Callable 型別建立的。

  • “回呼函式”是引擎“回呼函式”的基本版本。不支援自定義「可調用」 。當以下任何一項成立時,「回呼函式」是自定義的:

    • “回呼函式”具有綁定資訊(不支援使用“綁定”/“取消綁定”創建的“回呼函式”)。

    • 「Callable」 是透過 GDExtension API 從其他語言建立的。

有些方法如“bind”和“unbind”沒有實作,請使用lambdas代替:

string name = "John Doe";
Callable callable = Callable.From(() => SayHello(name));

void SayHello(string name)
{
    GD.Print($"Hello {name}");
}

lambda 捕獲“name”變量,以便將其綁定到“SayHello”方法。

RID

在這個專案中,我們會遵守 Godot 的命名慣例。

下列各個方法皆轉換為屬性並更改其名稱:

GDScript

C#

get_area()

Id

is_instance_valid(obj)

IsValid

基礎

在 C# 中,結構為無參數的建置函式。因此 new Basis() 會初始化所有原始成員並設為預設值。使用 Basis.Identity 與 GDScript 與 C++ 中的 Basis() 等效。

下列方法轉換成了名稱不同的屬性:

GDScript

C#

get_scale()

Scale

Transform2D

在 C# 中,結構為無參數的建置函式。因此,new Transform2D() 會初始化所有原始成員並設為預設值。請使用 Transform2D.Identity 來達成與 GDScript 或 C++ 中 Transform2D() 同等的效果。

下列各個方法皆轉換為屬性並更改其名稱:

GDScript

C#

get_rotation()

Rotation

get_scale()

Scale

get_scale()

Skew

Transform3D

在 C# 中,結構為無參數的建置函式。因此,new Transform2D() 會初始化所有原始成員並設為預設值。請使用 Transform2D.Identity 來達成與 GDScript 或 C++ 中 Transform2D() 同等的效果。

下列各個方法皆轉換為屬性並更改其名稱:

GDScript

C#

get_rotation()

Rotation

get_scale()

Scale

Rect2

下列欄位被轉換成了名稱 稍微 不同的屬性:

GDScript

C#

end

End

下列方法轉換成了名稱不同的屬性:

GDScript

C#

get_area()

Area

Rect2i

該型別在 C# 中被命名為“Rect2I”,以遵循 .NET 命名約定。

下列欄位被轉換成了名稱 稍微 不同的屬性:

GDScript

C#

end

End

下列方法轉換成了名稱不同的屬性:

GDScript

C#

get_area()

Area

AABB

在這個專案中,我們會遵守 Godot 的命名慣例。

下列方法轉換成了名稱不同的屬性:

GDScript

C#

get_scale()

Volume

四元數

在 C# 中,結構為無參數的建置函式。因此,new Quat() 會初始化所有原始成員並設為預設值。請使用 Quat.Identity 來達到與 GDScript 或 C++ 中 Quat() 同等的效果。

投影

在 C# 中,結構為無參數的建置函式。因此,new Quat() 會初始化所有原始成員並設為預設值。請使用 Quat.Identity 來達到與 GDScript 或 C++ 中 Quat() 同等的效果。

顏色

在 C# 中,結構為無參數的建置函式。因此,new Quat() 會初始化所有原始成員並設為預設值。請使用 Quat.Identity 來達到與 GDScript 或 C++ 中 Quat() 同等的效果。

從位元組建構 Color 的全域「Color8」方法可用作 Color 型別中的靜態方法。

顏色常數在“Colors”靜態類別中作為唯讀屬性提供。

下列方法轉換成了名稱不同的屬性:

GDScript

C#

get_area()

Luminance

下列方法轉換成了名稱不同的屬性:

GDScript

C#

String[]

FromHtml(ReadOnlySpan<char>)

提供了以下方法,文件如下:

GDScript

C#

hex(int)

Color8

hex64(int)

Color8

陣列

與緊縮陣列等價的是 System.Array

另見 C# 中的緊縮資料

Godot.Collections.Array<T> 為類別安全版的 Godot.Collections.Array 封裝。可使用 Godot.Collections.Array<T>(Godot.Collections.Array) 建置函式來建立。

另請參見 Array in C#

字典

若需未指定型別的 Variant 字典,請使用 Godot.Collections.Dictionary。而 Godot.Collections.Dictionary<TKey, TValue> 則為前者的型別安全包裝。

另請參見 Dictionary in C#

變體

Godot.Variant 用於表示 Godot 原生的 Variant 型別。任何 Variant 相容型別 都可與其互轉。

另請參見:C# Variant(變體)

與其他腳本語言溝通

本主題於 跨語言腳本撰寫 中詳細說明。

Onready 關鍵字

可以使用 C# 的 yield 關鍵字 來達到與在 GDScript 使用有單一參數的 yield 相同的功能。

C# 中的「await」關鍵字可以與任何可等待表達式一起使用。它通常與 TaskTask<TResult>ValueTaskValueTask<TResult> 型別的運算元一起使用。

回應事件將是包含以下欄位的字典:

  • t 是編譯時型別``dynamic``。

  • t 有一個名為 GetAwaiter 的可存取實例或擴充方法,沒有參數和型別參數,並且傳回型別 A 滿足以下所有條件:

    • A 實作介面``System.Runtime.CompilerServices.INotifyCompletion``。

    • “A” 有一個可存取、可讀的實例屬性“IsCompleted”,型別為“bool”。

    • “A” 有一個可存取的實例方法“GetResult”,沒有參數,也沒有型別參數。

對訊號的 yield 可以使用 async/await 與 Godot.Object.ToSignal 來達到同等效果。

範例:

public async Task SomeFunction()
{
    await ToSignal(timer, Timer.SignalName.Timeout);
    GD.Print("After timeout");
}