GDScript와의 API 차이점

이것은 C#과 GDScript간의 (불완전한) API 차이점 목록입니다.

일반적인 차이점

소개에서 설명했듯이, C#은 GDScript와 C++에서 snake_case가 아닌 PascalCase를 사용합니다.

글로벌 범위

글로벌 함수와 일부 상수는, C#이 네임 스페이스에서 선언하지 않기 때문에 클래스로 이동되어야 합니다. 대부분의 글로벌 상수는 자신의 이넘으로 이동합니다.

상수(Constant)

글로벌 상수는 자신의 이넘으로 이동합니다. 예를 들어, ERR_* 상수는 Error 이넘으로 이동합니다.

특수 경우:

GDScript C#
SPKEY GD.SpKey
TYPE_* Variant.Type 이넘
OP_* Variant.Operator 이넘

Math functions

Math global functions, like abs, acos, asin, atan and atan2, are located under Mathf as Abs, Acos, Asin, Atan and Atan2. The PI constant can be found as Mathf.Pi.

Random functions

Random global functions, like rand_range and rand_seed, are located under GD. Example: GD.RandRange and GD.RandSeed.

Other functions

Many other global functions like print and var2str are located under GD. Example: GD.Print and GD.Var2Str.

Exceptions:

GDScript C#
weakref(obj) Object.WeakRef(obj)
is_instance_valid(obj) Object.IsInstanceValid(obj)

Tips

Sometimes it can be useful to use the using static directive. This directive allows to access the members and nested types of a class without specifying the class name.

예:

using static Godot.GD;

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

키워드 가져오기

GDScript의 export 키워드 대신 [Export] 속성을 사용합니다.

예:

using Godot;

public class MyNode : Node
{
    [Export]
    NodePath _nodePath;
}

시그널 키워드

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.

[Signal]
delegate void MySignal(string willSendsAString);

이것도 보세요: C# 시그널

싱글톤(Singleton)

Singletons are available as static classes rather than using the singleton pattern. This is to make code less verbose than it would be with an Instance property.

예:

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 Godot.Object, like Connect. For such use cases we provide a static property named Singleton that returns the singleton instance. The type of this instance is Godot.Object.

예:

Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));

문자열(String)

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의 과부하(overload)인 추가 메서드를 제공하여, 대소문자 구분을 명시적으로 할 수 있습니다:
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: MatchMatchn이외에 추가 메서드를 제공하여, 대소문자 구분을 명시적으로 할 수 있습니다:
str.Match("*.txt"); // Case sensitive
str.ExprMatch("*.txt", true); // Case sensitive
str.Matchn("*.txt"); // Case insensitive
str.ExprMatch("*.txt", false); // Case insensitive

Basis(기초)

C#에서 Struct은 매개변수 없는 생성자를 가질 수 없습니다. 따라서, new Basis()는 모든 기본 멤버를 기본 값으로 초기화합니다. GDScript와 C++에서 Basis()에 해당하는 것으로 Basis.Identity를 사용합니다.

다음 메서드들는 다른 이름으로 변환된 속성들입니다:

GDScript C#
get_scale() Scale

Transform2D(변형2D)

C#에서 Struct는 매개변수 없는 생성자를 가질 수 없습니다. 따라서, new Transform2D()는 모든 기본 멤버를 기본 값으로 초기화합니다. GDScript와 C++에서 Transform2D()에 해당하는 것으로 Transform2D.Identity를 사용해주세요.

다음 메서드들은 관련된 이름으로 변경된 속성들입니다:

GDScript C#
get_rotation() Rotation
get_scale() Scale

Plane

다음 메서드는 약간 다른 이름으로 변환된 속성입니다:

GDScript C#
center() Center

Rect2

다음 영역은 약간 다른 이름으로 변환된 속성입니다:

GDScript C#
end End

다음 메서드들는 다른 이름으로 변환된 속성들입니다:

GDScript C#
get_area() Area

Quat

C#에서 Struct는 매개변수 없는 생성자를 가질 수 없습니다. 따라서, new Quat()는 모든 기본 멤버를 기본 값으로 초기화합니다. GDScript와 C++에서 Quat()에 해당하는 것으로 Quat.Identity를 사용해주세요.

The following methods were converted to a property with a different name:

GDScript C#
length() Length
length_squared() LengthSquared

배열

This is temporary. PoolArrays will need their own types to be used the way they are meant to.

GDScript C#
Array Godot.Array
PoolIntArray int[]
PoolByteArray byte[]
PoolFloatArray float[]
PoolStringArray String[]
PoolColorArray Color[]
PoolVector2Array Vector2[]
PoolVector3Array Vector3[]

Godot.Array<T> is a type-safe wrapper around Godot.Array. Use the Godot.Array<T>(Godot.Array) constructor to create one.

딕셔너리

Use Godot.Dictionary.

Godot.Dictionary<T> is a type-safe wrapper around Godot.Dictionary. Use the Godot.Dictionary<T>(Godot.Dictionary) constructor to create one.

변수

Variant 대신 System.Object (object)를 사용하세요.

다른 스크립팅 언어와 소통하기

The methods object Object.Call(string method, params object[] args), object Object.Get(string field) and object Object.Set(string field, object value) are provided to communicate with instances of other scripting languages via the Variant API.

Yield

Something similar to GDScript's yield with a single parameter can be achieved with C#'s yield keyword.

The equivalent of yield on signal can be achieved with async/await and Godot.Object.ToSignal.

예:

await ToSignal(timer, "timeout");
GD.Print("After timeout");

다른 차이점

preload, as it works in GDScript, is not available in C#. Use GD.Load or ResourceLoader.Load instead.

다른 차이점:

GDScript C#
Color8 Color.Color8
is_inf float.IsInfinity
is_nan float.IsNaN
dict2inst TODO
inst2dict TODO