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.

씬 스크립팅하기

이 강의에서는 Godot에서 사용 가능한 스크립트 언어를 살펴볼 것입니다. 옵션 별로 어떤 장점과 단점이 있는지 배워봅시다. 그 다음, GDScript를 사용하여 첫 번째 스크립트를 작성해 보겠습니다.

스크립트는 노드에 연결되어 노드의 동작을 확장합니다. 이는 스크립트가 연결된 노드의 모든 기능과 속성을 상속한다는 의미입니다.

Camera2D 노드가 배를 따라가는 게임을 예로 들어봅시다. Camera2D 노드는 기본적으로 상위 노드를 따릅니다. 플레이어가 피해를 입을 때 카메라가 흔들리기를 원한다고 상상해 봅시다. 이 기능은 Godot에 내장되어 있지 않으므로, Camera2D 노드에 스크립트를 연결하고 흔들림을 코딩하면 됩니다.

../../_images/scripting_camera_shake.gif

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

Godot는 **5가지 게임플레이 프로그래밍 언어**를 제공합니다: GDScript, C#, VisualScript와 GDNative 기술을 통한 C와 C++입니다. 더 많은 :ref:`커뮤니티 지원 언어 <doc_what_is_gdnative_third_party_bounds>`가 있지만 이것이 공식적인 언어입니다.

하나의 프로젝트에서 여러 언어를 사용할 수 있습니다. 예를 들어, 팀에서는 작성 속도가 빠른 GDScript로 게임플레이 로직을 코딩하고, 레벨 디자이너는 그래픽 언어인 VisualScript로 퀘스트를 스크립트하도록 하고, C# 또는 C++를 사용하여 복잡한 알고리즘을 구현하고 성능을 극대화할 수 있습니다. 또는, GDScript나 C#으로 모든 것을 작성해도 됩니다. 원하는 대로 하세요.

우리는 다양한 게임 프로젝트와 개발자의 요구에 부응하기 위해 다양한 선택지를 제공합니다.

어떤 이동 메서드를 사용해야 할까요?

초보자라면 **GDScript로 시작하기**를 권장합니다. GDScript는 Godot와 게임 개발자의 요구를 위해 특별히 만들어진 언어입니다. GDScript는 가볍고, 문법이 직관적이며 Godot와 가장 긴밀하게 통합되어 있습니다.

../../_images/scripting_gdscript.webp

C#의 경우 VSCode 또는 Visual Studio 등의 외부 코드 편집기가 필요합니다. C# 지원은 이제 성숙해졌지만 GDScript에 비해 학습 리소스가 더 적습니다. 그렇기 때문에 우리는 이미 언어 경험이 있는 사용자에게 주로 C#을 권장합니다.

각 언어의 특징과 장단점을 살펴보겠습니다.

GDScript

GDScript는 Godot용으로 만들어진`객체 지향 <https://en.wikipedia.org/wiki/Object- Oriented_programming>`_이자 명령형프로그래밍 언어입니다. GDScript는 게임 코딩 시간을 단축하기 위해 게임 개발자에 의해, 게임 개발자를 위해 만들어졌습니다. 그 기능은 다음과 같습니다:

  • 파일을 짧게 만드는 간단한 구문.

  • 엄청나게 빠른 컴파일 및 로딩 시간.

  • 편집기 통합은 노드, 시그널, 그리고 많은 편집 중인 씬과 관련된 항목을 위한 코드 완성으로 우리를 즐겁게 합니다.

  • (Vectors, transforms 등과 같은) 많은 벡터 유형을 지니고 있어서, 선형 대수를 많이 사용하는데 효율적입니다.

  • 정적 타입 언어보다 낮은 퍼포먼스.

  • No tracing garbage collection, as this feature eventually gets in the way when creating games. The engine counts references and manages the memory for you in most cases by default, but you can also control memory if you need to.

  • 점진적 타이핑. 변수에는 기본적으로 동적 유형이 있지만 강력한 유형 검사를 위해 유형 힌트 사용 가능.

GDScript의 코드 블록은 들여쓰기를 사용해 Python처럼 보이지만, 동일한 방식으로 동작하는 건 아닙니다. GDScript는 Squirrel, Lua, Python을 포함한 여러 언어에서 영감을 받았습니다.

참고

그냥 Python이나 Lua를 사용하면 안될까요?

몇 년 전, Godot는 Python을 사용했고 이후 Lua를 사용했습니다. 두 언어의 통합에는 많은 작업이 필요했고 심각한 제한이 있었습니다. 예를 들어, 스레딩 지원은 Python의 큰 과제였습니다.

전용 언어를 개발하는 것은 더 많은 작업이 필요하지 않으며 게임 개발자의 요구에 맞춰 조정할 수 있습니다. 이재 서드 파티 언어로는 제공하기 어려웠던 성능 최적화 및 기능 개발에 작업하고 있습니다.

.NET / C#

Microsoft의 C#은 게임 개발자들 사이에서 사랑받는 언어입니다. 그래서 이 언어를 공식적으로 지원합니다. C#은 많은 코드로 작성된 완전한 언어로, Microsoft의 자비로운 기여 덕분에 지원할 수 있게 되었습니다.

../../_images/scripting_csharp.png

비록 가비지 컬렉터에 대해 알아야 하지만 C#은 성능과 사용 편의성 두 가지를 절충하고 있습니다.

참고

C#으로 스크립트를 작성하려면 Godot 편집기의 Mono 버전을 사용해야 합니다. Godot 웹사이트의 `다운로드<https://godotengine.org/download/>`_ 페이지에서 다운로드할 수 있습니다.

Godot가 Mono .NET 런타임을 사용하기 때문에, 이론적으로 F#, Boo, ClojureCLR와 같은 공통 언어 기반 호환 프로그래밍 언어를 포함한 모든 서드 파티 .NET 라이브러리나 프레임워크를 Godot의 스크립트로 사용할 수 있습니다. 하지만 실제로는 C#만 공식으로 지원하는 .NET 옵션입니다.

참고

GDScript 코드 자체는 컴파일 된 C# 또는 C++만큼 빠르게 실행되지 않습니다. 그러나 대부분의 스크립트 코드는 엔진 내부에서 C++ 코드로 빠른 알고리즘으로 작성된 함수를 호출합니다. 대부분의 경우 GDScript, C# 또는 C++로 게임플레이 로직을 작성해도 성능에 큰 영향을 미치지 않습니다.

주의

Godot 4에서 C#으로 작성된 프로젝트는 현재 웹으로 내보낼 수 없습니다. 해당 플랫폼에서 C#을 사용하시려면 Godot 3를 사용하는 것을 추천드립니다. Android와 iOS 플랫폼은 Godot 4.2에서 내보낼 수 있지만, 이는 실험적이며 일부 제한이 적용될 수 있습니다.

더 보기

C#에 대해 더 알아보려면, C# 기초 페이지로 향하세요.

GDExtension을 통한 C++

마지막으로 3.0 출시에서 가장 빛나는 추가 요소입니다: GDNative는 Godot를 다시 컴파일하지 않아도 (심지어 재시작하지 않아도) C++로 스크립팅할 수 있게 해줍니다.

../../_images/scripting_cpp.png

내부 C API Bridge를 사용한 덕분에 모든 C++버전을 사용할 수 있고, 생성된 공유 라이브러리의 컴파일러 브랜드와 버전을 완벽하게 혼합할 수 있습니다.

이 언어는 성능에 있어서는 최고이지만 게임 전체에 사용할 필요는 없습니다. GDScript나 VisualScript을 통해 다른 부분을 작성할 수 있기 때문이죠. 그러나 GDNative의 API는 Godot의 실제 C++ API와 유사하기 때문에 명확하고 사용하기 쉽습니다.

GDNative로 작업할 때, 사용 가능한 타입과 함수 및 속성은 Godot의 실제 C++ API와 매우 유사합니다.

요약

스크립트는 노드의 기능을 확장하기 위해 연결하는 코드가 포함된 파일입니다.

Godot는 5개의 공식 스크립트 언어를 지원하여 성능과 사용 편의성 사이의 유연성을 제공합니다.

예를 들어, C 또는 C++로 까다로운 알고리즘을 구현하고 그 외 대부분의 게임 로직을 GDScript 또는 C#으로 작성하는 식으로 여러 언어를 사용할 수 있습니다.