Noções básicas de C#

Introdução

Aviso

O suporte a C# é um recurso novo disponível desde o Godot 3.0. Por isso, você ainda pode se deparar com alguns problemas, ou encontrar lugares onde a documentação poderia ser melhorada. Por favor relate problemas com C# no Godot na página do motor no Github, e qualquer problema de documentação na página da documentação no Github.

This page provides a brief introduction to C#, both what it is and how to use it in Godot. Afterwards, you may want to look at how to use specific features, read about the differences between the C# and the GDScript API and (re)visit the Scripting section of the step-by-step tutorial.

C# é uma linguagem de programação de alto nível desenvolvida pela Microsoft. No Godot, ela é implementada com o framework Mono 5.2 .NET, incluindo suporte completo para o C# 8.0. O Mono é uma implementação de código aberto do .NET Framework da Microsoft, baseado nos padrões ECMA para C# e Common Language Runtime. Um bom ponto de partida para verificar seus recursos é a página Compatibility na documentação do Mono.

Nota

Esse não é um tutorial completo e abrangente sobre a linguagem C#. Se você ainda não estiver familiarizado com sua sintaxe ou recursos, consulte o guia C# da Microsoft ou procure uma introdução adequada em outro lugar.

Configurando o C# para Godot

Pré-requisitos

Instale a versão estável mais recente do .NET Core SDK (3.1 no momento da escrita).

A partir do Godot 3.2.3, a instalação do Mono SDK não é mais um requisito, exceto se você estiver compilando o motor a partir do código-fonte.

O Godot empacota as partes do mono necessárias para executar jogos já compilados, no entanto o Godot não inclui as ferramentas necessárias para construir e compilar jogos, como MSBuild. Estas ferramentas precisam ser instaladas separadamente. As ferramentas necessárias estão inclusas no SDK .NET Core. O MSBuild também está incluso no SDK Mono, mas ele não pode compilar projetos com o novo formato csproj, portanto o SDK .NET Core é necessário para o Godot 3.2.3+.

Em resumo, você deve ter instalado o SDK .NET Core e a versão do Godot com Mono habilitada.

Notas adicionais

Certifique-se de instalar a versão de 64 bits do(s) SDK(s) se estiver usando a versão de 64 bits do Godot.

Se você estiver compilando o Godot a partir do código-fonte, instale a versão estável mais recente do Mono, e certifique-se de seguir os passos para habilitar o suporte ao Mono conforme descrito na página Compiling with Mono.

Configurando um editor externo

O suporte a C# no editor de scripts embutido do Godot é minimo. Considere usar uma IDE ou editor externos, como por exemplo Visual Studio Code ou MonoDevelop. Estes editores possuem preenchimento automático, ferramentas de depuração e outras funcionalidades úteis para o desenvolvimento em C#. Para selecionar um editor externo no Godot, clique em Editor -> Configurações do Editor e role a página até o Mono. Em Mono, clique em Editor então selecione o editor de sua preferência. Godot atualmente dá suporte aos seguintes editores externos:

  • Visual Studio 2019

  • Visual Studio Code

  • MonoDevelop

  • Visual Studio para Mac

  • JetBrains Rider

Veja as seções a seguir sobre como configurar um editor externo:

JetBrains Rider

Após ler a seção "Pré-requisitos", você pode baixar e instalar o JetBrains Rider.

No menu Editor → Configurações do Editor do Godot:

  • Defina Mono -> Editor -> External Editor como JetBrains Rider.

  • Defina Mono -> Builds -> Build Tool para dotnet CLI.

No Rider:

  • Defina a versão do MSBuild para .NET Core.

  • Instale o plugin de suporte do Godot.

Visual Studio Code

Após ler a seção "Pré-requisitos", você pode baixar e instalar o Visual Studio Code (também conhecido como VS Code).

No menu Editor → Configurações do Editor do Godot:

  • Defina Mono -> Editor -> External Editor para Visual Studio Code.

No Visual Studio Code:

Para configurar um projeto para depuração, abra a pasta do seu projeto no VSCODE. Vá até a aba Run e clique em create a launch.json file. Selecione C# Godot no menu flutuante. Agora, quando você começar o depurador no VS Code, o seu projeto na Godot irá iniciar.

Visual Studio (somente Windows)

Baixe e instale a última versão do Visual Studio. O Visual Studio incluirá os SDKs necessários se você tiver as cargas de trabalho corretas selecionadas, para que você não precise instalar manualmente as coisas listadas na seção "Pré-requisitos".

Ao instalar o Visual Studio, selecione estas cargas de trabalho:

  • Desenvolvimento mobile com .NET

  • Desenvolvimento de plataforma cruzada do .NET Core

No menu Editor → Configurações do Editor do Godot:

  • Defina Mono -> Editor -> External Editor para Visual Studio.

Agora, você precisa baixar a extensão Godot Visual Studio do github aqui. Dê um duplo clique no arquivo instalado e siga o processo de instalação.

Criando um script C#

Depois de configurar com sucesso o C# para Godot, você deverá ver a seguinte opção ao selecionar Attach Script no menu de contexto de um nó em sua cena:

../../../_images/attachcsharpscript.png

Observe que, embora alguns detalhes sejam alterados, a maioria dos conceitos funcionam da mesma maneira quando se usa o C# para criação de scripts. Se você é novo no Godot, você pode querer examinar os tutoriais em Scripting neste ponto. Enquanto alguns lugares na documentação ainda não tenham exemplos de C#, a maioria dos conceitos podem ser facilmente transferidos do GDScript.

Configuração de projeto e fluxo de trabalho

Quando você cria o primeiro script C#, o Godot inicializa os arquivos de projeto C# para seu projeto Godot. Isto inclui gerar uma solução C# (.sln) e um arquivo de projeto (.csproj) assim como alguns arquivos e pastas de utilitários (.mono, as vezes Properties/AssemblyInfo.cs). Todos estes, exceto .mono, são importantes e devem ser mantidos em seu sistema de controle de versão. O .mono pode ser adicionado com segurança à lista de ignorados do seu VCS. Para solucionar problemas, às vezes pode ajudar excluir a pasta .mono e deixá-la regenerar.

Exemplo

Aqui está um script C# em branco com alguns comentários para demonstrar como funciona.

using Godot;
using System;

public class YourCustomClass : Node
{
    // Member variables here, example:
    private int a = 2;
    private string b = "textvar";

    public override void _Ready()
    {
        // Called every time the node is added to the scene.
        // Initialization here.
        GD.Print("Hello from C# to Godot :)");
    }

    public override void _Process(float delta)
    {
        // Called every frame. Delta is time since the last frame.
        // Update game logic here.
    }
}

Como você pode ver, funções normalmente em escopo global no GDScript como a função print do Godot estão disponíveis na classe GD que é parte do namespace Godot. Para uma lista de métodos na classe GD, veja as páginas de referência de classe para @GDScript e @GlobalScope.

Nota

Tenha em mente que a classe que você deseja anexar ao seu nó deve ser nomeada como um arquivo .cs. Caso contrário, você receberá o seguinte erro e não poderá executar a cena: "Não é possível encontrar a classe XXX para o script res://XXX.cs"

Diferenças gerais entre o C# e o GDScript

A API do C# usa o PascalCase em vez do snake_case no GDScript/C++. Sempre que possível, fields e getters/setters foram convertidos em propriedades. Em geral, a API C# Godot se esforça para ser tão idiomática quanto for razoavelmente possível.

Para mais informações, veja a página C# API differences to GDScript.

Aviso

You need to (re)build the project assemblies whenever you want to see new exported variables or signals in the editor. This build can be manually triggered by clicking the word Build in the top right corner of the editor. You can also click Mono at the bottom of the editor window to reveal the Mono panel, then click the Build Project button.

Você também precisará reconstruir os assemblies do projeto para aplicar alterações nos scripts de "ferramenta".

Pegadas gerais e problemas conhecidos

Como o suporte ao C# é bastante novo no Godot, existem alguns sacrifícios e coisas que ainda precisam ser resolvidas. Abaixo segue uma lista das questões mais importantes que você deve estar ciente ao mergulhar em C# no Godot, mas em caso de dúvida, também dê uma olhada no rastreador de problemas para Mono oficial.

  • Escrever plugins para o editor é possível, mas atualmente é bastante complicado.

  • Atualmente o estado não é salvo e restaurado durante o "hot-reloading", com exceção das variáveis exportadas.

  • Os scripts C# anexados devem se referir a uma classe que tenha um nome de classe que corresponda ao nome do arquivo.

  • Existem alguns métodos como Get()/Set(), Call()/CallDeferred() e método de conexão de sinal Connect() que dependem dos padrões de nomeação da API snake_case de Godot. Então, por exemplo ao usar CallDeferred("AddChild"), AddChild não vai funcionar porque a API está esperando a chamada no formato snake_case como add_child. No entanto, você pode usar quaisquer propriedades ou métodos personalizados sem essa limitação.

A exportação de projetos Mono é suportada apenas para plataformas desktop (Linux, Windows e macOS), Android, HTML5 e iOS. A única plataforma ainda não suportada é UWP.

Desempenho do C# no Godot

De acordo com alguns benchmarks preliminares, o desempenho do C# no Godot — embora geralmente na mesma ordem de magnitude — é aproximadamente ~ 4x o do GDScript em alguns casos simples. Para o desempenho total, o C++ ainda é um pouco mais rápido; os detalhes vão variar de acordo com o seu caso de uso. O GDScript provavelmente é rápido o suficiente para a maioria das cargas de trabalho de scripts gerais. O C# é mais rápido, mas requer algum treinamento custoso quando falamos do Godot.

Usando pacotes NuGet no Godot

Pacotes NuGet podem ser instalados e usados com o Godot, como qualquer projeto. Muitas IDEs podem adicionar pacotes diretamente. Eles também podem ser adicionados manualmente adicionando a referência do pacote no arquivo .csproj localizado na pasta principal do projeto:

    <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
    </ItemGroup>
    ...
</Project>

A partir da versão 3.2.3, o Godot automaticamente baixa e instala os últimos pacotes NuGet na próxima vez que ele compila o projeto.

Perfilando seu código C#

  • Mono log profiler está disponível para Linux e macOS. Devido a uma mudança do Mono, ele não funciona no Windows atualmente.

  • Profiler de Mono Externo como JetBrains dotTrace pode ser usado como descrito aqui.