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.
Checking the stable version of the documentation...
C# 기능
이 페이지는 C#과 Godot에서 일반적으로 사용되는 기능과 어떻게 이 둘이 함께 사용되는 지에 대한 개요입니다.
형 변환과 캐스트하기
C#은 정적으로 타입형 언어입니다. 그러므로 다음을 할 수 없습니다:
var mySprite = GetNode("MySprite");
mySprite.SetFrame(0);
Node 인스턴스를 반환하는 GetNode() 메서드. Sprite의 경우, 원하는 파생 타입을 명시적으로 변환해야 합니다.
이를 위해, C#에서는 다양한 옵션이 있습니다.
캐스트하기와 타입 체크하기
반환된 노드를 Sprite로 캐스트 할 수 없는 경우 InvalidCastException을 발생시킵니다. 실패하지 않는다고 확신하면 as 연산자 대신에 그것을 사용할 것입니다.
Sprite2D mySprite = (Sprite2D)GetNode("MySprite");
mySprite.SetFrame(0);
AS 연산자 사용하기
노드가 Sprite로 캐스트 될 수 없다면 as 연산자는 null을 반환합니다, 그렇기 때문에 값 타입과는 함께 사용될 수 없습니다.
Sprite2D mySprite = GetNode("MySprite") as Sprite2D;
// Only call SetFrame() if mySprite is not null
mySprite?.SetFrame(0);
통용 메서드 사용하기
통용 메서드는 이 타입 변환을 투명하게 만들기 위해 제공됩니다.
GetNode<T>()은 반환하기 전에 노드를 캐스트 합니다. 노드가 원하는 타입으로 캐스트 되지 않는다면 InvalidCastException을 발생시킵니다.
Sprite2D mySprite = GetNode<Sprite2D>("MySprite");
mySprite.SetFrame(0);
GetNodeOrNull<T>()는 as 연산자를 사용하고 노드가 원하는 타입으로 캐스트 되지 않는다면 null을 반환합니다.
Sprite2D mySprite = GetNodeOrNull<Sprite2D>("MySprite");
// Only call SetFrame() if mySprite is not null
mySprite?.SetFrame(0);
IS 연산자를 사용하여 타입 체크하기
노드가 Sprite로 캐스트 되도록 체크하기 위해, is 연산자를 사용할 수 있습니다. Sprite가 캐스트 되지 않는다면 is 연산자는 거짓을 반환하고, 그렇지 않으면 참을 반환합니다.
if (GetNode("MySprite") is Sprite2D)
{
// Yup, it's a Sprite2D!
}
if (null is Sprite2D)
{
// This block can never happen.
}
is 연산자가 ``true``를 반환하는 경우 캐스트 결과를 조건부로 저장하는 새 변수를 선언할 수도 있습니다.
if (GetNode("MySprite") is Sprite2D mySprite)
{
// The mySprite variable only exists inside this block, and it's never null.
mySprite.SetFrame(0);
}
더 많은 고급 타입 체크하기의 경우, 패턴 일치에서 찾아볼 수 있습니다.
전처리기 지시문
Godot는 컴파일하는 환경에 따라 C# 코드를 변경할 수 있도록 여러 전처리기 지시문을 제공합니다.
예제
예를 들어, 다음과 같이 플랫폼에 따라 코드를 변경할 수 있습니다:
public override void _Ready()
{
#if (GODOT_MOBILE || GODOT_WEB)
// Use simple objects when running on less powerful systems.
SpawnSimpleObjects();
#else
SpawnComplexObjects();
#endif
}
혹은 여러분의 코드를 실행하는 엔진의 상태를 확인하는데 사용할 수도 있습니다. 크로스-엔진 라이브러리를 제작하는데 유용한 기능입니다:
public void MyPlatformPrinter()
{
#if GODOT
GD.Print("This is Godot.");
#elif UNITY_5_3_OR_NEWER
print("This is Unity.");
#else
throw new NotSupportedException("Only Godot and Unity are supported.");
#endif
}
또는 여러 Godot 버전을 대상으로 하고 해당 버전 중 일부에서만 사용할 수 있는 기능을 활용하는 스크립트를 작성할 수 있습니다:
public void UseCoolFeature()
{
#if GODOT4_3_OR_GREATER || GODOT4_2_2_OR_GREATER
// Use CoolFeature, that was added to Godot in 4.3 and cherry-picked into 4.2.2, here.
#else
// Use a workaround for the absence of CoolFeature here.
#endif
}
모든 지시문
GODOT은 항상 Godot 프로젝트를 정의합니다.``TOOLS``는 디버그 구성(에디터 및 에디터 플레이어)으로 빌드할 때 정의됩니다.
GODOT_REAL_T_IS_DOUBLE``는 ``GodotFloat64속성이 ``true``로 설정된 경우 정의됩니다.사용중인 운영 체제의 종류에 따라서
GODOT_X11,GODOT_WINDOWS,GODOT_OSX,GODOT_ANDROID,GODOT_IOS,GODOT_HTML5, 또는GODOT_SERVER중 하나가 정의됩니다. 위 이름들은 후에 변경될 수 있습니다. 이들은 OS 싱글턴의get_name()메서드로 생성될 수 있지만, 메서드가 반환하는 모든 OS에서 .NET 버전 Godot가 실행될 수 있는 것은 아닙니다.GODOTX,GODOTX_Y,GODOTX_Y_Z,GODOTx_OR_GREATER,GODOTX_y_OR_GREATER및GODOTX_Y_z_OR_GREATER. 여기서X,Y및Z``는 현재 메이저로 대체됩니다. Godot의 마이너 및 패치 버전. ``x,y및 ``z``는 0부터 해당 구성 요소의 현재 버전 번호까지의 모든 값으로 대체됩니다.참고
이 정의는 Godot 4.0.4와 4.1에서 처음 추가되었습니다. 현재 Godot 버전에 관계없이 이전 버전에 대한 버전 정의는 존재하지 않습니다.
예: Godot 4.0.5는
GODOT4,GODOT4_OR_GREATER,GODOT4_0,GODOT4_0_OR_GREATER,GODOT4_0_5,GODOT4_0_4_OR_GREATER및GODOT4_0_5_OR_GREATER``를 정의합니다. Godot 4.3.2는 ``GODOT4,GODOT4_OR_GREATER,GODOT4_3,GODOT4_0_OR_GREATER,GODOT4_1_OR_GREATER,GODOT4_2_OR_GREATER,GODOT4_3_OR_GREATER,GODOT4_3_2,GODOT4_3_0_OR_GREATER``를 정의합니다. ``GODOT4_3_1_OR_GREATER및GODOT4_3_2_OR_GREATER.
내보내기 를 할 때, 내보내기 기능에 따라서 아래의 것들이 정의될 수 있습니다:
플랫폼에 따라서
GODOT_PC,GODOT_MOBILE, 또는GODOT_WEB중 하나가 정의됩니다.플랫폼에 따라서
GODOT_PC,GODOT_MOBILE, 또는GODOT_WEB중 하나가 정의됩니다.
예제 프로젝트를 확인하려면 OS 테스트 데모를 확인하세요: https://github.com/godotengine/godot-demo-projects/tree/master/misc/os_test