> ## 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.

# Modelos de projeto no Visual Studio para o desenvolvimento de jogos para PC

> Modelos de projeto no Visual Studio para o desenvolvimento de jogos para PC

Este tópico descreve os modelos de projeto de jogos para PC com Windows disponíveis no Visual Studio.

## Modelos de projeto

O Microsoft Game Development Kit (GDK) instala os seguintes modelos de projeto C++ do Visual Studio.

* **Direct3D 12 Desktop Game (Classic):** um projeto para um jogo do Windows que usa Direct3D 12 e C++ com a plataforma MSBuild x64 'padrão'.
* **Direct3D 12 Desktop Game:** um projeto para um jogo do Windows que usa Direct3D 12 e C++ com a plataforma personalizada do MSBuild Gaming.Desktop.x64.
* **Direct3D 12 Desktop Game Makefile:** um projeto para um jogo do Windows que usa Direct3D 12 e C++ por meio de um sistema de build externo.
* **Desktop Static Library:** um projeto para uma biblioteca estática do Windows com a plataforma personalizada do MSBuild Gaming.Desktop.x64.
* **Desktop DLL:** um projeto para uma biblioteca de vínculo dinâmico do Windows com a plataforma personalizada do MSBuild Gaming.Desktop.x64.

### Modelo autônomo

Como alternativa ao uso dos modelos do GDK instalados para o desenvolvimento para Desktop e dispositivos portáteis, há um modelo de projeto totalmente autônomo que usa o [vc Package Manager](https://aka.ms/vcpkg) para adicionar as versões empacotadas do *Microsoft GDK*, do *DirectX 12 Agility SDK* etc. Ele pode ser usado como base para lançar na Microsoft Store e no XBOX PC App. Esse pacote inclui um modelo de projeto MSBuild e um CMake, e requer o Visual Studio 2022 v17.6 ou posterior.

Veja o [Visual Studio Marketplace](https://aka.ms/gdktemplates).

## Localizar os modelos de projeto do Microsoft Game Development Kit (GDK)

Localize os modelos do Microsoft Game Development Kit (GDK) pesquisando e filtrando na caixa de diálogo **Criar um novo projeto** do Visual Studio 2019 ou do Visual Studio 2022. Os modelos do Microsoft Game Development Kit (GDK) podem ser encontrados filtrando pela linguagem **C++**, pela plataforma **Windows** e pelo tipo de projeto **Jogos**, conforme mostrado na captura de tela a seguir.

<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="Captura de tela da caixa de diálogo Criar um novo projeto no Visual Studio 2019 para localizar modelos de jogos para PC com Windows" width="903" height="628" data-path="images/gdk/tools/vs_2019_pc_templates.png" />

## A plataforma Gaming.Desktop.x64, os arquivos do msbuild e as propriedades

O Microsoft Game Development Kit (GDK) define uma plataforma do msbuild chamada Gaming.Desktop.x64 para ser usada no desenvolvimento de jogos para PC com Windows. A Gaming.Desktop.x64 inclui um conjunto de arquivos de propriedades e destinos do msbuild que definem as diretivas de pré-processador necessárias (como `_GAMING_DESKTOP`) e configuram os caminhos de modo que, por exemplo, bibliotecas de extensão, arquivos de inclusão e bibliotecas sejam encontrados corretamente em *C:\Program Files (x86)\Microsoft GDK\edition\GRDK* quando o jogo for compilado. Para obter detalhes específicos sobre as propriedades e os destinos do msbuild definidos pela plataforma Gaming.Desktop.x64, veja [Configurar projetos sem instalar o Microsoft Game Development Kit](/pt-BR/build/console-features/build-without-install/project-configuration-withoutinstall).

## Usar a plataforma x64 com o Microsoft Game Development Kit (GDK)

Ao direcionar para PC sem usar a plataforma personalizada do MSBuild Gaming.Desktop.x64, os arquivos de projeto devem implementar toda a funcionalidade necessária.

* Para oferecer suporte à instalação 'lado a lado', o projeto precisa selecionar a edição apropriada. Isso pode ser feito por meio de uma propriedade definida na seção *Globals*:

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

O uso da variável de ambiente `GRDKLatest` usa como padrão a edição mais recente instalada no PC de desenvolvimento e tem o formato **C:\Program Files (x86)\Microsoft GDK\<edition>\GRDK\\**.

> Usamos a propriedade **GDKPCEditionPath** no restante das configurações de build. O uso direto de `GRDKLatest` como propriedade no restante do arquivo de projeto não é recomendado, pois isso torna mais difícil experimentar novas versões, gerenciar atualizações, reproduzir problemas etc. Se você usar arquivos .props personalizados para conduzir o processo de build, coloque `GDKPCEditionPath` neles em vez de em cada arquivo de projeto. Observe também que essa propriedade precisa de uma barra no final para atender às convenções do MSBuild.

No VS 2019, você também deve usar a versão nativa x64 das ferramentas. No VS 2022, esse é o padrão, portanto é opcional.

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

* Todas as bibliotecas de extensão necessárias do Microsoft Game Development Kit (GDK) devem ter os caminhos de inclusão/bibliotecas apropriados e as DLLs de redistribuição incluídas, conforme necessário. Isso pode ser feito modificando as importações *ExtensionSettings* do arquivo vcxproj:

**Microsoft GDK (outubro de 2024) ou posterior:**

```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 (junho de 2024) ou anterior:**

```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>
```

* As propriedades de diretórios do VC++ **ExecutablePath**, **IncludePath** e **LibraryPath** devem ser atualizadas para incluir os caminhos do 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>
```

Para o caminho do executável, usamos a variável de ambiente `GameDK` diretamente, pois ele não é 'lado a lado'. Isso também pode ser substituído como uma propriedade em um arquivo .props personalizado, se necessário.

As propriedades **Console\_SdkIncludeRoot** e **Console\_SdkLibPath** são fornecidas pelo *ExtensionLibrary.props* do Microsoft Game Development Kit (GDK), que são compatíveis tanto com PC x64 quanto com XBOX.

* Para os *ItemDefinitionGroups* da sua plataforma, adicione `_GAMING_DESKTOP` às definições do pré-processador para manter a consistência com a Gaming.Desktop.x64 ao usar bibliotecas ou outro middleware.

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

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

* Também nos *ItemDefinitionGroups*, adicione as seguintes bibliotecas às dependências de bibliotecas adicionais. Especificamente, `xgameruntime.lib` para o GameRuntime e `gameinput.lib` para o GameInput no PC.

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

* O último elemento necessário é converter o arquivo de origem **MicrosoftGameConfig.mgc** no **MicrosoftGame.config** necessário na saída do build. Isso pode ser implementado como uma personalização de build:

```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>
```

O **MicrosoftGame.config** também precisará dos ativos de logotipo necessários para ser válido, o que pode ser feito com uma cópia de arquivos:

```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>
```

> Crie um projeto a partir do modelo *Direct3D 12 Desktop Game (Classic)* e revise-o para verificar as configurações acima, bem como algumas recomendações adicionais.

## Veja também

[Visual Studio (para o desenvolvimento de jogos para PC)](/pt-BR/tools/tools-pc/visualstudio/gr-visualstudio-toc)


## Related topics

- [Visual Studio (conteúdo)](/pt-BR/tools/tools-pc/visualstudio/gr-visualstudio-toc.md)
- [Modelos de projeto no Visual Studio para desenvolvimento para XBOX](/pt-BR/tools/tools-console/visualstudio/durango-visual-studio-templates.md)
- [Iniciar um novo título para PC com modelos de projeto do GDK](/pt-BR/build/gdk-and-engines/guides/gdk-project-templates.md)
- [Propriedades do Visual Studio para o desenvolvimento de jogos para PC](/pt-BR/tools/tools-pc/visualstudio/gr-vs-property-pages.md)
- [Depurar projetos de PC em dispositivos Windows remotos no Visual Studio](/pt-BR/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
