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.

.NET으로 컴파일하기

요구 사항

  • .NET SDK 8.0+

    dotnet --info를 사용하여 설치된 .NET SDK 버전을 확인할 수 있습니다.

.NET 모듈 활성화

참고

Godot에 대한 C# 지원은 역사적으로 .NET 런타임 대신 Mono 런타임을 사용했으며 내부적으로 많은 항목이 여전히 dotnet 대신 ``mono``로 명명되거나 ``mono``라고도 합니다.

기본적으로 .NET 모듈은 빌드 시 비활성화됩니다. 이를 활성화하려면 SCons 명령줄에 module_mono_enabled=yes 옵션을 추가하고, 그렇지 않으면 원하는 Godot 바이너리를 빌드하기 위한 지침을 따르세요.

접착제 생성

관리되는 라이브러리 소스의 일부는 ClassDB에서 생성됩니다. 이러한 소스 파일은 관리되는 라이브러리를 빌드하기 전에 생성되어야 합니다. 이는 매개변수 --headless --generate-mono-glue 뒤에 출력 디렉터리 경로를 사용하여 실행하여 .NET 지원 Godot 편집기 바이너리에 의해 생성될 수 있습니다. 이 경로는 Godot 디렉토리에서 ``modules/mono/glue``여야 합니다:

<godot_binary> --headless --generate-mono-glue modules/mono/glue

이 명령은 Godot에게 ``modules/mono/glue/GodotSharp/GodotSharp/Generated``에서 Godot API에 대한 C# 바인딩을 생성하고 ``modules/mono/glue/GodotSharp/GodotSharpEditor/Generated``에서 편집기 도구에 대한 C# 바인딩을 생성하도록 지시합니다. 이러한 파일이 생성되면, 이 프로세스를 반복할 필요 없이 원하는 모든 대상에 대해 Godot의 관리 라이브러리를 구축할 수 있습니다.

<godot_binary>``는 .NET 모듈을 활성화하여 컴파일한 편집기 바이너리를 나타냅니다. 정확한 이름은 시스템 구성에 따라 다르지만 ``bin/godot.<platform>.editor.<arch>.mono 형식이어야 합니다. bin/godot.linuxbsd.editor.x86_64.mono 또는 bin/godot.windows.editor.x86_32.mono.exe. 특히 .mono 접미사에 유의하세요! 이전에 .NET 지원 없이 Godot를 컴파일했다면 이 접미사가 없는 유사한 이름의 바이너리가 있을 수 있습니다. 이러한 바이너리는 .NET 글루를 생성하는 데 사용할 수 없습니다.

참고

ClassDB에 등록된 API가 변경될 때마다 글루 소스를 다시 생성해야 합니다. 즉, 새 메소드가 스크립팅 API에 등록되거나 해당 메소드의 매개변수 중 하나가 변경되는 경우입니다. ClassDB와 글루 소스 사이에 API 불일치가 있는 경우 Godot는 시작 시 오류를 인쇄합니다.

간단한 플러그인 만들기

.NET 글루를 생성한 후에는 build_assemblies.py 스크립트를 사용하여 관리형 라이브러리를 구축할 수 있습니다.

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin

모든 것이 순조롭게 진행되었다면 관리되는 라이브러리를 포함하는 GodotSharp 디렉터리가 bin 디렉터리에 생성되었을 것입니다.

참고

기본적으로 모든 개발 빌드는 버전 번호를 공유하므로 NuGet 패키지 캐싱에 문제가 발생할 수 있습니다. 이 문제를 해결하려면 ``GODOT_VERSION_STATUS``를 사용하여 모든 빌드에 고유한 버전을 제공하거나 모든 빌드 후에 ``GodotNuGetFallbackFolder``를 삭제하여 패키지 캐시를 지웁니다.

"클래식" Godot 빌드와는 달리, .NET 모듈을 활성화하여(그리고 대상 플랫폼에 따라) 빌드할 때 편집기와 내보낸 프로젝트 모두에 대해 데이터 디렉토리가 생성될 수 있습니다. 이 디렉토리는 올바른 기능을 위해 중요하며 Godot와 함께 배포되어야 합니다. :ref:`Data directory<compiling_with_dotnet_data_directory>`에서 이 디렉토리에 대한 자세한 내용을 확인하세요.

플랫폼

라이브러리가 빌드되는 특정 플랫폼을 제어하려면 --godot-platform=<platform> 인수를 제공하십시오. 현재 시스템용으로 빌드하려면 이 인수를 생략하세요.

This currently only controls the inclusion of the support for Visual Studio as an external editor, the libraries are otherwise identical.

Godot에서 NuGet 패키지 사용하기

API 어셈블리, 소스 생성기 및 사용자 지정 MSBuild 프로젝트 SDK는 NuGet 패키지로 배포됩니다. 이는 모두 사용자에게 투명하지만 개발 중에는 상황이 복잡해질 수 있습니다.

해당 패키지의 개발 버전에서 Godot를 사용하려면 MSBuild가 해당 패키지를 찾을 수 있는 로컬 NuGet 소스를 만들어야 합니다.

먼저 로컬 NuGet 소스의 위치를 선택합니다. 기본 설정이 없으면 다음 권장 위치 중 하나에 빈 디렉터리를 만듭니다.

  • Windows에서는 C:\Users\<username>\MyLocalNugetSource

  • Linux, *BSD 등에서는 ~/MyLocalNugetSource

이 경로는 나중에 ``<my_local_source>``로 참조됩니다.

디렉터리를 선택한 후 이 .NET CLI 명령을 실행하여 로컬 소스를 사용하도록 NuGet을 구성합니다.

dotnet nuget add source <my_local_source> --name MyLocalNugetSource

build_assemblies.py 스크립트를 실행할 때 <my_local_source>``를 ``--push-nupkgs-local 옵션에 전달합니다.

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source>

이 옵션을 사용하면 패키지가 지정된 로컬 NuGet 소스에 추가되고 충돌하는 패키지 버전이 NuGet 캐시에서 제거됩니다. 실수를 방지하려면 개발 중에 C# 솔루션을 빌드할 때 항상 이 옵션을 사용하는 것이 좋습니다.

더 이상 사용되지 않는 기능에 의존하지 않고 빌드(NO_DEPRECATED)

더 이상 사용되지 않는 클래스와 함수(예: scons에 대한 deprecated=no 인수) 없이 Godot를 빌드할 때, 관리되는 라이브러리도 더 이상 사용되지 않는 코드에 대한 종속성 없이 빌드되어야 합니다. 이는 --no-deprecated 인수를 전달하여 수행됩니다.

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --no-deprecated

배정밀도 지원(REAL_T_IS_DOUBLE)

배정밀도 지원, 즉 스콘의 precision=double 인수로 Godot를 빌드할 때, 관리되는 라이브러리는 --precision=double 인수를 전달하여 일치하도록 조정되어야 합니다:

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --precision=double

예제

예(윈도우)

# Build editor binary
scons platform=windows target=editor module_mono_enabled=yes
# Build export templates
scons platform=windows target=template_debug module_mono_enabled=yes
scons platform=windows target=template_release module_mono_enabled=yes

# Generate glue sources
bin/godot.windows.editor.x86_64.mono --headless --generate-mono-glue modules/mono/glue
# Build .NET assemblies
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --godot-platform=windows

X11 (Linux, *BSD)

# Build editor binary
scons platform=linuxbsd target=editor module_mono_enabled=yes
# Build export templates
scons platform=linuxbsd target=template_debug module_mono_enabled=yes
scons platform=linuxbsd target=template_release module_mono_enabled=yes

# Generate glue sources
bin/godot.linuxbsd.editor.x86_64.mono --headless --generate-mono-glue modules/mono/glue
# Generate binaries
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --godot-platform=linuxbsd

데이터 디렉터리

데이터 디렉토리는 .NET 모듈이 활성화된 상태로 빌드된 Godot 바이너리에 대한 종속성입니다. 여기에는 Godot의 올바른 기능을 위한 중요한 파일이 포함되어 있습니다. Godot 실행 파일과 함께 배포되어야 합니다.

편집기

Godot 편집기의 데이터 디렉터리 이름은 항상 GodotSharp``입니다. 디렉토리에는 Godot API 어셈블리가 있는 ``Api 하위 디렉토리와 GodotTools 어셈블리 및 해당 종속성과 같이 편집기에 필요한 도구가 있는 Tools 하위 디렉토리가 포함되어 있습니다.

macOS에서 Godot 편집기가 번들로 배포되는 경우 GodotSharp 디렉터리는 번들 내부의 <bundle_name>.app/Contents/Resources/ 디렉터리에 배치될 수 있습니다.

템플릿 내보내기

내보낸 프로젝트의 데이터 디렉터리는 내보내는 동안 편집기에 의해 생성됩니다. 이름은 ``data_<APPNAME>_<ARCH>``입니다. 여기서 ``<APPNAME>``는 프로젝트 설정 ``application/config/name``에 지정된 애플리케이션 이름이고 ``<ARCH>``는 내보내기의 현재 아키텍처입니다.

다중 아키텍처 내보내기의 경우 이러한 데이터 디렉터리가 여러 개 생성됩니다.

명령줄 옵션

다음은 .NET 모듈로 빌드할 때 사용할 수 있는 명령줄 옵션 목록입니다.

  • module_mono_enabled=예 | 아니요

    • .NET 모듈을 활성화하여 Godot를 빌드하세요.