与gdscript的API差异¶
这是C# 和GDScript之间的API差异(不完整)列表。
全球范围¶
全局函数和一些常量必须移到类中,因为C# 不允许在命名空间中声明它们。大多数全局常量被移到它们自己的枚举中。
常量¶
全局常量被移到它们自己的枚举中。例如, ERR_*
常量被移动到 Error
枚举。
特殊情况:
GDScript |
C# |
---|---|
|
|
|
|
|
|
数学函数¶
数学全局函数,比如 abs
, acos
, asin
, atan
和 atan2
,位于 Mathf
作为 Abs
, Acos
, Asin
, Atan
和 Atan2
. 这个 PI
常数可以找到为 Mathf.Pi
.
随机函数¶
随机全局函数,比如 rand_range
和 rand_seed
,位于 GD
.例子: GD.RandRange
和 GD.RandSeed
.
其他功能¶
许多其他的全局函数,如 print
和 var2str
位于 GD
.例子: GD.Print
和 GD.Var2Str
.
例外情况:
GDScript |
C# |
---|---|
|
|
|
|
提示¶
有时使用 using static
指令。此指令允许在不指定类名的情况下访问类的成员和嵌套类型。
例子:
using static Godot.GD;
public class Test
{
static Test()
{
Print("Hello"); // Instead of GD.Print("Hello");
}
}
导出关键字¶
使用 [Export]
属性而不是gdscript export
关键字。
例子:
using Godot;
public class MyNode : Node
{
[Export]
NodePath _nodePath;
}
信号关键字¶
使用 [Signal]
属性来声明信号而不是gdscript signal
关键字。此属性应用于 delegate ,其名称签名将用于定义信号。
[Signal]
delegate void MySignal(string willSendsAString);
参见: C# 信号
单件¶
singleton作为静态类而不是使用singleton模式。这将使代码比使用 Instance
财产。
例子:
Input.IsActionPressed("ui_down")
然而,在一些非常罕见的情况下,这是不够的。例如,您可能希望从基类访问成员 Godot.Object
,像 Connect
. 对于这种用例,我们提供一个名为 Singleton
返回单例实例。此实例的类型为 Godot.Object
.
例子:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
弦¶
Use System.String
(string
). Most of Godot's String methods are
provided by the StringExtensions
class as extension methods.
例子:
string upper = "I LIKE SALAD FORKS";
string lower = upper.ToLower();
但有一些不同之处:
erase
:字符串在C# 中是不可变的,因此我们无法修改传递给扩展方法的字符串。因此,Erase
添加为的扩展方法StringBuilder
而不是字符串。或者,您可以使用string.Remove
.IsSubsequenceOf
/IsSubsequenceOfi
:提供了一个附加方法,它是IsSubsequenceOf
,允许您显式指定区分大小写:
str.IsSubsequenceOf("ok"); // Case sensitive
str.IsSubsequenceOf("ok", true); // Case sensitive
str.IsSubsequenceOfi("ok"); // Case insensitive
str.IsSubsequenceOf("ok", false); // Case insensitive
Match
/Matchn
/`` exprmatch``:另外还提供了一个方法Match
和Matchn
,允许您显式指定区分大小写:
str.Match("*.txt"); // Case sensitive
str.ExprMatch("*.txt", true); // Case sensitive
str.Matchn("*.txt"); // Case insensitive
str.ExprMatch("*.txt", false); // Case insensitive
基础¶
结构在C# 中不能有无参数构造函数。因此, new Basis()
将所有基元成员初始化为其默认值。使用 Basis.Identity
相当于 Basis()
在GDScript和C++中。
以下方法已转换为具有不同名称的属性:
GDScript |
C# |
---|---|
|
|
变压器2D¶
结构在C# 中不能有无参数构造函数。因此, new Transform2D()
将所有基元成员初始化为其默认值。请使用 Transform2D.Identity
相当于 Transform2D()
在GDScript和C++中。
以下方法已转换为属性,并更改了各自的名称:
GDScript |
C# |
---|---|
|
|
|
|
夸脱¶
结构在C# 中不能有无参数构造函数。因此, new Quat()
将所有基元成员初始化为其默认值。请使用 Quat.Identity
相当于 Quat()
在GDScript和C++中。
以下方法已转换为具有不同名称的属性:
GDScript |
C# |
---|---|
|
|
|
|
数组¶
这是暂时的。Poolarrays需要他们自己的类型才能按预期使用。
GDScript |
C# |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Godot.Collections.Array<T>
是否是类型安全包装 Godot.Collections.Array
. 使用 Godot.Collections.Array<T>(Godot.Collections.Array)
构造函数创建一个。
词典¶
使用 Godot.Collections.Dictionary
.
Godot.Collections.Dictionary<T>
是否是类型安全包装 Godot.Collections.Dictionary
. 使用 Godot.Collections.Dictionary<T>(Godot.Collections.Dictionary)
构造函数创建一个。
变体¶
System.Object
(object
) is used instead of Variant
.
与其他脚本语言通信¶
方法 object Object.Call(string method, params object[] args)
, object Object.Get(string field)
和 object Object.Set(string field, object value)
通过变量API与其他脚本语言的实例进行通信。
让¶
类似于GDScript的 yield
用C# 可获得单个参数。 yield keyword .
异步/等待和 Godot.Object.ToSignal
.
例子:
await ToSignal(timer, "timeout");
GD.Print("After timeout");
其他差异¶
preload
在gdscript中工作时,在C# 中不可用。使用 GD.Load
或 ResourceLoader.Load
相反。
其他差异:
GDScript |
C# |
---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |