Visual Studio의 PC 게임 개발용 프로젝트 템플릿
이 항목은 Visual Studio에서 사용 가능한 Windows PC 게임 프로젝트 템플릿을 설명합니다.
프로젝트 템플릿
Microsoft GDK(게임 개발 키트)는 다음 Visual Studio C++ 프로젝트 템플릿을 설치합니다.
Direct3D 12 데스크톱 게임(클래식): '스톡' x64 MSBuild 플랫폼과 함께 Direct3D 12 및 C++를 사용하는 Windows 게임용 프로젝트입니다.
Direct3D 12 데스크톱 게임: Gaming.Desktop.x64 MSBuild 맞춤 플랫폼과 함께 Direct3D 12 및 C++를 사용하는 Windows 게임용 프로젝트입니다.
Direct3D 12 데스크톱 게임 메이크파일: 외부 빌드 시스템과 Direct3D 12 및 C++를 사용하는 Windows 게임용 프로젝트입니다.
데스크톱 정적 라이브러리: Gaming.Desktop.x64 MSBuild 사용자 지정 플랫폼이 있는 Windows 정적 라이브러리용 프로젝트입니다.
데스크톱 DLL: Gaming.Desktop.x64 MSBuild 사용자 정의 플랫폼이 있는 Windows 동적 연결 라이브러리용 프로젝트입니다.
Microsoft GDK(게임 개발 키트) 프로젝트 템플릿 찾기
Visual Studio 2019 또는 Visual Studio 2022의 새 프로젝트 만들기 대화 상자에서 검색하고 필터링하여 Microsoft GDK(게임 개발 키트) 템플릿을 찾습니다. 다음 스크린샷에서 볼 수 있듯이 C++ 언어, Windows 플랫폼 및 게임 프로젝트 유형으로 필터링하여 Microsoft GDK(게임 개발 키트) 템플릿을 찾을 수 있습니다.
Gaming.Desktop.x64 플랫폼, msbuild 파일 및 속성
Microsoft GDK(게임 개발 키트)는 Windows PC 게임 개발에 사용할 Gaming.Desktop.x64라는 msbuild 플랫폼을 정의합니다. Gaming.Desktop.x64에는 필수 전처리기 지시문(예: _GAMING_DESKTOP
)을 정의하고, 게임을 빌드할 때 파일, 라이브러리 등을 포함한 확장 라이브러리가 C:\Program Files (x86)\Microsoft GDK\edition\GRDK에서 올바르게 찾을 수 있도록 경로를 설정하는 msbuild 속성 및 대상 파일의 집합이 포함됩니다. Gaming.Desktop.x64 플랫폼에서 정의하는 msbuild 속성 및 대상에 대한 자세한 내용은 Microsoft 게임 개발 키트 설치 없이 프로젝트 구성을 참조하세요.
Microsoft 게임 개발 키트(GDK)와 함께 x64 플랫폼 사용
사용자 지정 Gaming.Desktop.x64 MSBuild 플랫폼을 사용하지 않고 PC를 대상으로 하는 경우 프로젝트 파일은 필요한 모든 기능을 구현해야 합니다.
- '병렬' 설치를 지원하려면 프로젝트에서 적절한 에디션을 선택해야 합니다. 이는 글로벌 섹션에 설정된 속성을 통해 수행할 수 있습니다.
<PropertyGroup Label="Globals">
...
<GDKPCEditionPath>$(GRDKLatest)</GDKPCEditionPath>
</PropertyGroup>
GRDKLatest
환경 변수의 사용은 기본적으로 개발 PC에 설치된 최신 버전이며 C:\Program Files (x86)\Microsoft GDK<edition>\GRDK\ 형식입니다.
빌드 설정의 나머지 부분에서 GDKPCEditionPath 속성을 사용합니다. 프로젝트 파일의 나머지 부분에서
GRDKLatest
을(를0 속성으로 직접 사용하는 것은 새 릴리스를 시도하고, 업데이트를 관리하고, 문제를 재현하는 등의 작업을 더 어렵게 만들기 때문에 권장되지 않습니다. 빌드 프로세스를 구동하기 위해 사용자 지정 .props 파일을 사용하는 경우 각 프로젝트 파일 대신GDKPCEditionPath
을(를) 해당 위치에 배치하세요. 또한 이 속성은 MSBuild 규칙을 충족하기 위해 후행 슬래시가 필요합니다.
VS 2019의 경우 x64 기본 버전의 도구도 사용해야 합니다. VS 2022의 경우 이것이 기본값이므로 선택 사항입니다.
<PropertyGroup Label="Globals">
...
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
- 필요한 모든 Microsoft 게임 개발 키트(GDK) 확장 라이브러리에는 적절한 포함/lib 경로와 필요에 따라 포함된 재배포 DLL이 있어야 합니다. 이는 vcxproj 파일 ExtensionSettings 가져오기를 수정하여 수행할 수 있습니다.
Microsoft GDK(2024년 10월) 이상:
<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월) 또는 그 이전:
<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 GDK(게임 개발 키트) 경로를 포함하도록 업데이트되어야 합니다.
<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>
<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 게임 개발 키트(GDK) ExtensionLibrary.props에서 제공합니다.
- 플랫폼 ItemDefinitionGroups의 경우 라이브러리 또는 기타 미들웨어를 사용할 때 Gaming.Desktop.x64와의 일관성을 위해 전처리기 정의에
_GAMING_DESKTOP
을(를) 추가해야 합니다.
<PreprocessorDefinitions>_GAMING_DESKTOP;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_GAMING_DESKTOP;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- 또한 ItemDefinitionGroups에서 추가 라이브러리 종속성에 다음 라이브러리를 추가합니다. 구체적으로 GameRuntime의 경우
xgameruntime.lib
이고 PC의 GameInput의 경우gameinput.lib
입니다.
<AdditionalDependencies>xgameruntime.lib;gameinput.lib;d3d12.lib;dxgi.lib;dxguid.lib;uuid.lib;kernel32.lib;user32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- 마지막 필수 요소는 소스 MicrosoftGameConfig.mgc 파일을 빌드 출력의 필수 MicrosoftGame.config로 변환하는 것입니다. 이는 빌드 사용자 지정으로 구현할 수 있습니다.
<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도 유효하려면 필요한 로고 자산이 필요하며, 이는 복사 파일로 수행할 수 있습니다.
<ItemGroup>
<CopyFileToFolders Include="GraphicsLogo.png" />
<CopyFileToFolders Include="LargeLogo.png" />
<CopyFileToFolders Include="SmallLogo.png" />
<CopyFileToFolders Include="SplashScreen.png" />
<CopyFileToFolders Include="StoreLogo.png" />
</ItemGroup>
Direct3D 12 데스크톱 게임(클래식) 템플릿에서 프로젝트를 만들고 위의 설정과 몇 가지 추가 권장 사항을 검토합니다.