C#과 GDScript의 API 차이점¶
이것은 C#과 GDScript간의 (불완전한) API 차이점 목록입니다.
일반적인 차이점¶
C# 기초에서 설명했듯이, GDScript와 C++에서 snake_case
가 사용되는 반면, C#은 PascalCase
를 사용합니다.
전역 범위¶
C#은 네임 스페이스에서 전역 함수와 일부 상수는 선언하지 않기 때문에 이 둘은 클래스로 이동해야 합니다. 대부분의 전역 상수는 자신의 열거형으로 이동합니다.
상수¶
전역 상수는 자신의 열거형으로 이동합니다. 예를 들어 ERR_*
상수는 Error
열거형으로 이동합니다.
특별한 경우:
GD스크립트 |
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
.
예외:
GD스크립트 |
C# |
---|---|
|
|
|
|
팁¶
때로는 using static
지시문을 사용하는 게 유용할 수 있습니다. 이 지시문이면 클래스 이름을 지정하지 않고도 클래스의 멤버와 중첩된 타입에 접근할 수 있습니다.
예시:
using static Godot.GD;
public class Test
{
static Test()
{
Print("Hello"); // Instead of GD.Print("Hello");
}
}
Export 키워드¶
GDScript의 export
키워드 대신 [Export]
어트리뷰트를 사용하십시오. 이 어트리뷰트는 필요에 따라 PropertyHint 와 hintString
매개변수를 포함할 수도 있으며, 값을 전달해 기본값을 설정할 수 있습니다.
예시:
using Godot;
public 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;
}
Signal 키워드¶
GDScript의 signal
키워드 대신 [Signal]
속성을 사용하여 시그널을 선언합니다. 이 속성은 delegate에 사용되어야 하며, 이름은 시그널을 정의하는 데 사용됩니다.
[Signal]
delegate void MySignal(string willSendsAString);
다음 또한 확인하십시오: c_sharp_signals.
onready 키워드¶
GDScript에서는 아래와 같이 ready 함수가 onready (다음을 참조하십시오 onready 키워드)로 호출될 때까지 멤버 변수의 초기화를 연기할 수 있습니다:
onready var my_label = get_node("MyLabel")
반면 C#에는 이런 기능이 존재하지 않습니다. 같은 효과를 위해서는 아래와 같이 작성해야 합니다.
private Label _myLabel;
public override void _Ready()
{
_myLabel = GetNode<Label>("MyLabel");
}
싱글톤¶
싱글톤은 싱글톤 패턴을 사용하는 대신 정적 클래스로 사용할 수 있습니다. 이것으로 Instance
속성으로 작업하는 것과 비슷하면서도 더 적은 문장의 코드를 만들 수 있습니다.
예시:
Input.IsActionPressed("ui_down")
하지만, 일부 드문 경우가 있어 충분하지 않습니다. 예를 들어 Connect
처럼 기본 클래스 Godot.Object
의 멤버로 접근해야하는 경우가 있습니다. 이런 경우를 위해, 싱글톤 인스턴스를 반환하는 Singleton
정적 속성을 제공합니다. 인스턴스의 타입은 Godot.Object
입니다.
예시:
Input.Singleton.Connect("joy_connection_changed", this, nameof(Input_JoyConnectionChanged));
String¶
System.String
(string
)을 사용합니다. 모든 Godot 문자열 메서드는 StringExtensions
클래스에서 확장 메서드 형태로 제공됩니다.
예시:
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
:Match
와Matchn
이외에 추가 메서드를 제공하여, 명시적으로 대소문자를 구분할 수 있습니다:
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
를 사용합니다.
다음 메서드들는 다른 이름으로 변경된 속성들입니다:
GD스크립트 |
C# |
---|---|
|
|
Transform2D¶
C#에서 Struct는 매개변수 없는 생성자를 가질 수 없습니다. 따라서, new Transform2D()
는 모든 기본 멤버를 기본 값으로 초기화합니다. GDScript와 C++에서 Transform2D()
에 해당하는 것으로 Transform2D.Identity
를 사용해주세요.
다음 메서드들은 관련된 이름으로 변경된 속성들입니다:
GD스크립트 |
C# |
---|---|
|
|
|
|
Plane¶
다음 메서드는 약간 다른 이름으로 변경된 속성입니다:
GD스크립트 |
C# |
---|---|
|
|
Rect2¶
다음 영역은 약간 다른 이름으로 변경된 속성입니다:
GD스크립트 |
C# |
---|---|
|
|
다음 메서드들는 다른 이름으로 변경된 속성들입니다:
GD스크립트 |
C# |
---|---|
|
|
Quat¶
C#에서 Struct는 매개변수 없는 생성자를 가질 수 없습니다. 따라서, new Quat()
는 모든 기본 멤버를 기본 값으로 초기화합니다. GDScript와 C++에서 Quat()
에 해당하는 것으로 Quat.Identity
를 사용해주세요.
다음 메서드는 다른 이름으로 변경된 속성들입니다:
GD스크립트 |
C# |
---|---|
|
|
|
|
배열¶
이것은 일시적인 것입니다. PoolArray도 자신을 의미하는 자체적인 타입이 필요할 것입니다.
GD스크립트 |
C# |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Godot.Collections.Array<T>
는 Godot.Collections.Array
를 둘러싸는 type-safe wrapper 입니다. Godot.Collections.Array<T>(Godot.Collections.Array)
생성자를 사용해 만들 수 있습니다.
딕셔너리¶
Godot.Collections.Dictionary
를 사용합니다.
Godot.Collections.Dictionary<T>
는 Godot.Collections.Dictionary
를 둘러싸는 type-safe wrapper입니다. Godot.Collections.Dictionary<T>(Godot.Collections.Dictionary)
생성자를 사용해 만들 수 있습니다.
변종¶
Variant
대신 System.Object
(object
)를 사용하세요.
다른 스크립팅 언어와 소통하기¶
이것은 : ref :`doc_cross_language_scripting`에 광범위하게 설명되어 있습니다.
Yield¶
단일 매개변수를 사용하는 GDScript의 yield
와 비슷한 C#의 yield 키워드.
async/await와 Godot.Object.ToSignal
로 시그널에서 yield와 동일한 효과를 얻을 수 있습니다.
예시:
await ToSignal(timer, "timeout");
GD.Print("After timeout");
다른 차이점¶
GDScript에서 쓰이는 preload
는 C#에서 사용할 수 없습니다. 대신 GD.Load
또는 ResourceLoader.Load
를 사용합니다.
다른 차이점:
GD스크립트 |
C# |
---|---|
|
|
|
|
|
|
|
TODO |
|
TODO |