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 与 GDScript 的差异

这是C#和GDScript之间API差异的(不完整)列表.

一般差异

C# 基础 中所述,C#通常使用 PascalCase 而不是GDScript和C++中使用的 snake_case.

全局作用域

全局函数和某些常量必须移动到类中, 因为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 , AtanAtan2. 常数 PI 可以通过 Mathf.Pi 获得.

C# 也提供了静态 System.MathSystem.MathF 类,其中可能包含其他有用的数学操作。

随机函数

rand_rangerand_seed 等全局随机函数位于 GD 下. 例如 GD.RandRange 以及 GD.RandSeed.

请考虑使用 System.Random ,如果你需要加密强度的随机性,使用 System.Security.Cryptography.RandomNumberGenerator

其他函数

许多其他全局函数,如 printvar_to_str ,位于 GD 下。例如: GD.PrintGD.VarToStr

例外情况:

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)

提示

有时候, 使用 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 或 float.IsFinitedouble.IsFinite

is_inf

Mathf.IsInf 或 float.IsInfinitydouble.IsInfinity

is_instance_id_valid

GodotObject.IsInstanceIdValid

is_instance_valid

GodotObject.IsInstanceValid

is_nan

Mathf.IsNaN 或 float.IsNaNdouble.IsNaN

is_same

operator == 或 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

使用 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

使用 $ 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

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 或 System.Linq.Enumerable.Range

type_exists

ClassDB.ClassExists(type)

preload 在 GDScript 中可用,在 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 的名称将用于定义信号。这个 delegate 必须带有 EventHandler 后缀,一个 event 将在同名的类中生成,但不包含后缀,使用该事件的名称与 EmitSignal 配合使用。

[Signal]
delegate void MySignalEventHandler(string willSendAString);

另见: C# 信号 .

@onready 注解¶</