> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PC 게임 개발을 위한 Visual Studio 프로젝트 템플릿

> PC 게임 개발을 위한 Visual Studio 프로젝트 템플릿

이 항목은 Visual Studio에서 사용할 수 있는 Windows PC 게임 프로젝트 템플릿에 대해 설명합니다.

## 프로젝트 템플릿

Microsoft Game Development Kit (GDK)는 다음 Visual Studio C++ 프로젝트 템플릿을 설치합니다.

* **Direct3D 12 Desktop Game (Classic):** 'stock' x64 MSBuild 플랫폼과 함께 Direct3D 12 및 C++를 사용하는 Windows 게임 프로젝트입니다.
* **Direct3D 12 Desktop Game:** Gaming.Desktop.x64 MSBuild 사용자 지정 플랫폼과 함께 Direct3D 12 및 C++를 사용하는 Windows 게임 프로젝트입니다.
* **Direct3D 12 Desktop Game Makefile:** 외부 빌드 시스템을 사용하여 Direct3D 12 및 C++를 사용하는 Windows 게임 프로젝트입니다.
* **Desktop Static Library:** Gaming.Desktop.x64 MSBuild 사용자 지정 플랫폼과 함께 사용하는 Windows 정적 라이브러리 프로젝트입니다.
* **Desktop DLL:** Gaming.Desktop.x64 MSBuild 사용자 지정 플랫폼과 함께 사용하는 Windows 동적 링크 라이브러리 프로젝트입니다.

### 독립형 템플릿

데스크톱 및 핸드헬드 개발에 설치된 GDK 템플릿을 사용하는 대안으로, [vc Package Manager](https://aka.ms/vcpkg)를 사용하여 *Microsoft GDK*, *DirectX 12 Agility SDK* 등의 패키지된 버전을 추가하는 완전히 독립적인 프로젝트 템플릿이 있습니다. 이는 Microsoft Store 및 XBOX PC 앱에 출시하기 위한 기준선으로 사용할 수 있습니다. 이 패키지에는 MSBuild와 CMake 프로젝트 템플릿이 모두 포함되어 있으며, Visual Studio 2022 v17.6 이상이 필요합니다.

[Visual Studio 마켓플레이스](https://aka.ms/gdktemplates)를 참조하세요.

## Microsoft Game Development Kit (GDK) 프로젝트 템플릿 찾기

Visual Studio 2019 또는 Visual Studio 2022의 **새 프로젝트 만들기** 대화 상자에서 검색 및 필터링하여 Microsoft Game Development Kit (GDK) 템플릿을 찾을 수 있습니다. 다음 스크린샷과 같이 **C++** 언어, **Windows** 플랫폼, **Games** 프로젝트 유형으로 필터링하여 Microsoft Game Development Kit (GDK) 템플릿을 찾을 수 있습니다.

<img src="https://mintcdn.com/microsoft-4404708b/6TXzXmujKayly5Sf/images/gdk/tools/vs_2019_pc_templates.png?fit=max&auto=format&n=6TXzXmujKayly5Sf&q=85&s=69a6e437793926b85bda150574bff5f3" alt="Windows PC 게임 템플릿을 찾기 위한 Visual Studio 2019의 새 프로젝트 만들기 대화 상자 스크린샷" width="903" height="628" data-path="images/gdk/tools/vs_2019_pc_templates.png" />

## Gaming.Desktop.x64 플랫폼, msbuild 파일 및 속성

Microsoft Game Development Kit (GDK)는 Windows PC 게임 개발에 사용할 Gaming.Desktop.x64라는 msbuild 플랫폼을 정의합니다. Gaming.Desktop.x64에는 필수 전처리기 지시문(예: `_GAMING_DESKTOP`)을 정의하는 msbuild 속성 및 대상 파일 집합이 포함되어 있으며, 예를 들어 게임을 빌드할 때 확장 라이브러리, 포함 파일 및 라이브러리가 *C:\Program Files (x86)\Microsoft GDK\edition\GRDK* 아래에서 올바르게 발견되도록 경로가 설정됩니다. Gaming.Desktop.x64 플랫폼에서 정의된 msbuild 속성 및 대상에 대한 구체적인 자세한 내용은 [Microsoft Game Development Kit을 설치하지 않고 프로젝트 구성](/build/console-features/build-without-install/project-configuration-withoutinstall)을 참조하세요.

## Microsoft Game Development Kit (GDK)와 함께 x64 플랫폼 사용

사용자 지정 Gaming.Desktop.x64 MSBuild 플랫폼을 사용하지 않고 PC를 대상으로 할 때, 프로젝트 파일은 필요한 모든 기능을 구현해야 합니다.

* '병렬' 설치를 지원하려면 프로젝트가 적절한 에디션을 선택해야 합니다. 이는 *Globals* 섹션에 속성을 설정하여 수행할 수 있습니다.

```xml theme={null}
<PropertyGroup Label="Globals">
...
  <GDKPCEditionPath>$(GRDKLatest)</GDKPCEditionPath>
</PropertyGroup>
```

`GRDKLatest` 환경 변수를 사용하면 기본적으로 개발 PC에 설치된 최신 에디션이 되며, 형식은 \*\*C:\Program Files (x86)\Microsoft GDK\<edition>\GRDK\\\*\*입니다.

> 나머지 빌드 설정에서는 **GDKPCEditionPath** 속성을 사용합니다. 나머지 프로젝트 파일에서 `GRDKLatest`를 속성으로 직접 사용하는 것은 새 릴리스 시도, 업데이트 관리, 문제 재현 등을 어렵게 만들기 때문에 권장되지 않습니다. 사용자 지정 .props 파일을 사용하여 빌드 프로세스를 이끌고 있다면, 각 프로젝트 파일 대신 `GDKPCEditionPath`를 거기에 배치하세요. 이 속성은 MSBuild 규칙을 충족하기 위해 뒤에 슬래시가 필요합니다.

VS 2019의 경우 도구의 x64 네이티브 버전을 반드시 사용해야 합니다. VS 2022의 경우 이것이 기본값이므로 선택 사항입니다.

```xml theme={null}
<PropertyGroup Label="Globals">
...
  <PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
```

* 필요한 Microsoft Game Development Kit (GDK) 확장 라이브러리에는 필요에 따라 적절한 include/lib 경로와 재배포 DLL이 포함되어야 합니다. 이는 vcxproj 파일의 *ExtensionSettings* 가져오기를 수정하여 수행할 수 있습니다.

**Microsoft GDK (2024년 10월) 이상:**

```xml theme={null}
<ImportGroup Label="ExtensionSettings">
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Services.API.C\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.XCurl.API\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.LibHttpClient\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Game.Chat.2.Cpp.API\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Multiplayer.Cpp\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Party.Cpp\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.PartyXboxLive.Cpp\ExtensionLibrary.props" />
</ImportGroup>
```

**Microsoft GDK (2024년 6월) 이하:**

```xml theme={null}
<ImportGroup Label="ExtensionSettings">
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.XCurl.API\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Game.Chat.2.Cpp.API\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Multiplayer.Cpp\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Party.Cpp\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.PartyXboxLive.Cpp\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
</ImportGroup>
```

* VC++ 디렉터리 속성 **ExecutablePath**, **IncludePath**, **LibraryPath**는 Microsoft Game Development Kit (GDK) 경로를 포함하도록 업데이트되어야 합니다.

```xml theme={null}
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
  <ExecutablePath>$(GameDK)bin;$(ExecutablePath)</ExecutablePath>
  <IncludePath>$(GDKPCEditionPath)GameKit\Include;$(Console_SdkIncludeRoot);$(IncludePath);</IncludePath>
  <LibraryPath>$(GDKPCEditionPath)GameKit\lib\amd64;$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
</PropertyGroup>
```

```xml theme={null}
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
  <ExecutablePath>$(GameDK)bin;$(ExecutablePath)</ExecutablePath>
  <IncludePath>$(GDKPCEditionPath)GameKit\Include;$(Console_SdkIncludeRoot);$(IncludePath);</IncludePath>
  <LibraryPath>$(GDKPCEditionPath)GameKit\lib\amd64;$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
</PropertyGroup>
```

실행 파일 경로의 경우 '병렬'이 아니므로 `GameDK` 환경 변수를 직접 사용합니다. 필요한 경우 사용자 지정 .props 파일의 속성으로 재정의할 수도 있습니다.

**Console\_SdkIncludeRoot** 및 **Console\_SdkLibPath** 속성은 x64 PC 및 XBOX 모두와 호환되는 Microsoft Game Development Kit (GDK) \_ExtensionLibrary.props\_에 의해 제공됩니다.

* 플랫폼 \_ItemDefinitionGroups\_의 경우 라이브러리나 기타 미들웨어를 사용할 때 Gaming.Desktop.x64와의 일관성을 위해 전처리기 정의에 `_GAMING_DESKTOP`을 추가해야 합니다.

```xml theme={null}
 <PreprocessorDefinitions>_GAMING_DESKTOP;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
```

```xml theme={null}
<PreprocessorDefinitions>_GAMING_DESKTOP;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
```

* 또한 \_ItemDefinitionGroups\_에서 다음 라이브러리를 추가 라이브러리 종속성에 추가하세요. 구체적으로 GameRuntime용 `xgameruntime.lib`와 PC의 GameInput용 `gameinput.lib`.

```xml theme={null}
<AdditionalDependencies>xgameruntime.lib;gameinput.lib;d3d12.lib;dxgi.lib;dxguid.lib;uuid.lib;kernel32.lib;user32.lib;%(AdditionalDependencies)</AdditionalDependencies>
```

* 마지막 필수 요소는 소스 **MicrosoftGameConfig.mgc** 파일을 빌드 출력의 필수 **MicrosoftGame.config**로 변환하는 것입니다. 이는 빌드 사용자 지정으로 구현할 수 있습니다.

```xml theme={null}
<CustomBuild Include="MicrosoftGameConfig.mgc">
  <Command>copy %(Identity) "$(OutDir)MicrosoftGame.config"
makepkg.exe localize /d "$(OutDir)" /pd "$(OutDir)" /gc "%(Identity)"</Command>
  <Message>MGC Compile</Message>
  <Outputs>$(OutDir)MicrosoftGame.config</Outputs>
</CustomBuild>
```

**MicrosoftGame.config**는 유효하려면 필수 로고 자산도 필요하며, 이는 복사 파일로 수행할 수 있습니다.

```xml theme={null}
<ItemGroup>
  <CopyFileToFolders Include="GraphicsLogo.png" />
  <CopyFileToFolders Include="LargeLogo.png" />
  <CopyFileToFolders Include="SmallLogo.png" />
  <CopyFileToFolders Include="SplashScreen.png" />
  <CopyFileToFolders Include="StoreLogo.png" />
</ItemGroup>
```

> *Direct3D 12 Desktop Game (Classic)* 템플릿에서 프로젝트를 만들고 위의 설정과 몇 가지 추가 권장 사항에 대해 검토하세요.

## 함께 보기

[Visual Studio (PC 게임 개발용)](/tools/tools-pc/visualstudio/gr-visualstudio-toc)


## Related topics

- [Visual Studio (목차)](/ko/tools/tools-pc/visualstudio/gr-visualstudio-toc.md)
- [XBOX 개발용 Visual Studio 프로젝트 템플릿](/ko/tools/tools-console/visualstudio/durango-visual-studio-templates.md)
- [GDK 프로젝트 템플릿으로 새 PC 타이틀 시작](/ko/build/gdk-and-engines/guides/gdk-project-templates.md)
- [PC 게임 개발을 위한 Visual Studio 속성](/ko/tools/tools-pc/visualstudio/gr-vs-property-pages.md)
- [Visual Studio](/ko/tools/tools-pc/visualstudio/index.md)
