EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
C#chevron-right

Introdução ao Unity para criar um jogo 2D

Nic Raboy9 min read • Published Jan 17, 2022 • Updated Apr 02, 2024
UnityC#
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Se você acompanha o conteúdo do Portal do programador do MongoDB, saberá que alguns de nós do MongoDB (Nic Raboy, AdrieneTacke, Keren Huaulme) estamos trabalhando em um jogo intitulado Plummeting Persons, um jogo de Tributo ao fall Online : Final Knockout. Até agora, nos concentramos no planejamento de jogos e parte de nossa infraestrutura de backend com um armazenamento de perfil de usuário.
Como parte da progresso natural em nosso desenvolvimento do jogo e parte desta série de tutoriais, faz sentido começar com o aspecto real do jogo, e isso significa mergulhar em Unity, nossa estrutura de desenvolvimento de jogos.
Neste tutorial, vamos nos familiarizar com alguns dos fundamentos básicos do Unity e fazer com que um ator se mova na tela, bem como evite colisões. Se você está procurando como planejamos integrar o jogo ao MongoDB, isso será guardado para outro tutorial.
Um exemplo do que queremos realizar pode ser visto na seguinte imagem dinâmica:
Exemplo de jogo Unity 2D
A taxa de quadros na imagem é um pouco instável, mas o resultado real é bastante suave.

Os requisitos

Antes de começarmos, é importante entender os requisitos para criar o jogo.
  • Unity 2020+
  • Imagem a ser usada como reprodutor
  • Imagem a ser usada para o background
Estou usando o Unity 2020.1.6f1, mas qualquer versão em torno desta versão específica deve funcionar. Você pode baixar oUnity sem nenhum custo para macOS e Windows, mas certifique-se de entender o modelo de licenciamento se planeja vende seu jogo.
Como o objetivo deste tutorial é mover um objeto de jogo e lidar com colisões com outro objeto de jogo, precisaremos de imagens. Estou usando uma imagem de 1x1 pixel para meu jogador, obstáculo e plano de fundo, todos dimensionados de forma diferente no Unity, mas você pode usar as imagens que quiser.

Criando um novo projeto Unity com ativos de texto e script

Para facilitar a compreensão, começaremos com um projeto novo. No aplicativoUnity Hub que fica disponível após a instalação do Unity, escolha criar um novo projeto.
Unity cria novo projeto 2D
Você vai querer escolher 2D a partir dos modelos disponíveis, mas o nome e o local do projeto não importam, desde que você se familiarize com eles.
O projeto pode demorar um pouco para ser gerado, mas, quando for concluído, você deverá ver algo parecido com o seguinte:
Novo Projeto Unity Vazio
Como parte dos primeiros passos, precisamos deixar o projeto um pouco mais pronto para desenvolvimento. Na árvore do projeto , clique com o botão direitoem Ativos e escolha criar uma nova pasta para Texturas e também Scripts.
Criar nova pasta de ativos da Unity
Todas as imagens que planejamos usar em nosso jogo acabarão na pastaTexturas e qualquer lógica de jogo terminará como um script dentro da pasta Scripts. Se você tiver suas imagens de jogador, plano de fundo e obstáculos, coloque-as no diretórioTexturas agora.
No momento, há uma única cena para o jogo intitulada SampleScene. O nome desta cena não representa adequadamente pelo que a cena será responsável. Em vez disso, vamos renomeá-lo para GameScene, pois será usado como o principal componente de jogo do nosso projeto. A cena de um jogo é semelhante a uma cena de um programa de televisão ou filme. Provavelmente você terá mais de uma cena, mas cada cena é responsável por algo distinto. Por exemplo, em um jogo você pode ter uma cena para o menu que aparece quando o usuário inicia o jogo, uma cena para o jogo e uma cena para o que acontece quando o jogo termina. Os casos de uso são ilimitados.
Com a cena nomeada apropriadamente, é hora de adicionar objetos de jogo para o jogador, plano de fundo e obstáculo. No painel de hierarquia do projeto, clique com o botão direito do mouse abaixo do itemCâmera principal (se sua hierarquia estiver expandida) ou logo abaixo deGameScene (se não estiver expandida) e escolha Criar vazio na lista.
Criar objeto de jogo vazio no Unity
Queremos criar um objeto de jogo para cada um dos seguintes itens: o jogador, o plano de fundo e o obstáculo. O nome não é muito importante, mas provavelmente é uma boa ideia dar nomes a eles com base em sua finalidade.
Para resumir o que fizemos, verifique novamente o seguinte:
  • Criado um diretóriode texturas e scripts dentro do diretóriode ativos.
  • Foi adicionada uma imagem que representa um jogador, um obstá- culo e um plano de fundo ao diretórioTexturas.
  • Renomeado SampleScene para GameScene.
  • Criou um objeto de jogoPlayer na cena.
  • Criou um objeto de jogoObstacle na cena.
  • Criou um objeto de jogoBackground dentro da cenário.
Neste momento, temos o projeto devidamente elaborado.

Adicionando renderizações de Sprite, física, caixas de colisão e scripts a um objeto de jogo

Temos nossos objetos e ativos de jogo Go e agora estamos prontos para configurá-los. Isso significa adicionar imagens ao objeto do jogo, propriedades físicas e quaisquer dados relacionados à colisão.
Com o objeto de jogo do jogador selecionado na hierarquia do projeto, selecione Add Component e procure por Sprite Renderer.
Adicionar renderizador Sprite ao objeto de jogo
O renderizador Sprite nos permite associar uma imagem ao nosso objeto de jogo. Clique no ícone de círculo ao lado da caixa de entrada da propriedadeSprite . Um painel será exibido e permitirá que você selecione a imagem que deseja associar ao objeto de jogo selecionado. Você vai querer usar a imagem adicionada ao diretórioTexturas. Siga os mesmos passos para o entrave e o background.
Você pode ou não notar que a disposição em camadas dos sprites com imagens não está correta, no sentido de que algumas imagens estão em segundo plano e outras em primeiro plano. Para corrigir a disposição em camadas, precisamos adicionar uma camada de classificação aos objetos do jogo.
Adicionar camada de classificação à renderização de Sprite no Unity
Em vez de usar a camada de classificação padrão, escolha Adicionar camada de classificação... para que possamos usar nossa própria estratégia. Crie duas novas camadas intituladas Background e GameObject e certifique-se de que Background esteja acima deGameObject na lista. A lista representa a ordem de renderização, portanto, mais alto na lista é renderizado primeiro e mais baixo na lista é renderizado por último. Isso significa que os itens renderizados por último aparecem no nível mais alto do primeiro plano. Pense nisso como camadas no Adobe Photoshop, apenas invertidas em termos de quais camadas são mais visíveis.
Com as camadas de classificação definidas, defina a Camada de Classificaçãocorreta para cada um dos objetos de jogo na cenário.
Para maior clareza, o objeto do jogo em segundo plano deve ter a camada de classificaçãoBackground aplicada e o obstáculo, bem como o objeto do jogo do jogador, devem ter a camada de classificaçãoGameObject aplicada. Estamos fazendo isso dessa maneira porque, com base na ordem de nossas camadas, queremos que o objeto do jogo de fundo fique realmente atrás dos outros objetos do jogo.
A próxima etapa é adicionar dados de física e caixa de colisão aos objetos de jogo que devem ter esses dados. Selecione o objeto de jogo jogador e procure um componente 2Dde corpo rígido.
Adicionar corpo rígido 2D ao objeto de jogo no Unity
Como este é um jogo 2D que não tem noção de piso, a escala de gravidade do jogador deve ser zero. Isso evitará que o jogador caia da tela assim que o jogo começar. O jogador é o único objeto do jogo que precisará de um corpo rígido porque é o único objeto do jogo em que a física pode ser importante.
Além de um corpo rígido, o jogador também precisará de uma caixa de colisão. Adicione um novo componenteBox Collider 2D ao objeto de jogo do jogador.
Adicionar o Colisor de Caixas 2D ao Objeto de Desafio no Unity
O componenteBox Collider 2D também deve ser adicionado ao entrave. O plano de fundo, uma vez que não tem interação com o jogador ou objeto, não precisa de nenhum componente adicional adicionado a ele.
A configuração final para os objetos do jogo é a adição dos scripts para a lógica do jogo.
Clique com o botão direito do mouse no diretórioScripts e escolha criar um novo script C#. Você vai querer renomear o script para algo que represente o objeto de jogo do qual ele fará parte. Para este script específico, ele será associado ao objeto de jogo do jogador.
Adicionar script a um objeto de jogo no Unity
Depois de selecionar o objeto de jogo para o jogador, arraste o arquivo de script para a áreaAdicionar componente do inspetor para adicioná-lo ao objeto de jogo.
Neste momento, tudo para esse jogo em particular está configurado. No entanto, antes de passarmos para a próxima etapa, vamos confirmar os componentes adicionados a cada um dos objetos do jogo na cena.
  • O background tem um renderizador de sprite com uma camada declassificação de background .
  • O reprodutor tem um renderizador de sprite, um corpo rígido e um colisor de caixa com a camada de classificação doTimeObject.
  • O Obstacle tem um renderizador de sprite e um colisor de caixa com a camada de classificação GameObject.
O próximo passo é aplicar alguma lógica de jogo.

Controlando um objeto de jogo com um script Unity C#

No Unity, tudo em uma cenário é controlado por um script. Esses scripts existem em objetos de jogo que facilitam a separação dos pedaços que compõem um jogo. Por exemplo, o jogador pode ter um script com lógica. Os obstáculos podem ter um roteiro diferente com lógica. Caramba, até a grama da sua cena pode ter um roteiro. Depende totalmente de você como deseja roteirizar cada parte da sua cena.
Neste exemplo de jogo específico, vamos apenas adicionar lógica ao script do objeto do jogador.
O script já deve estar associado a um objeto player, então abra o arquivo de script e você deverá ver o seguinte código:
Para mover o jogador, temos algumas opções. Poderíamos transformar a posição do objeto do jogo, podemos transformar a posição do corpo rígido ou podemos aplicar a força física ao corpo rígido. Cada um deles nos dará resultados diferentes, sendo que a opção de força é a mais exclusiva.
Como temos física, vejamos as duas últimas opções, começando com o movimento pela força.
Dentro do seu script C#, altere seu código para o seguinte:
Estamos usando FixedUpdate porque estamos usando física em nosso objeto de jogo. Se não tivéssemos usado física, a funçãoUpdate estaria bem.
Quando qualquer uma das teclas direcionais é pressionada (não as teclas de seta), a força é aplicada ao corpo rígido em uma determinada direção e a uma determinada velocidade. Se você executasse o jogo e tentasse mover o jogador, perceberia que ele se move com uma espécie de efeito de deslizamento no gelo. Em vez de mover o jogador a uma velocidade constante, o jogador aumenta a velocidade à medida que ganha impulso e, quando você solta as teclas de movimento, ele diminui gradualmente a velocidade. Isso se deve à física e à aplicação de força.
Mover o jogador para o obstáculo fará com que o jogador pare. Nem precisamos adicionar nenhum código para tornar isso possível.
Então, vamos ver como mover o jogador sem aplicar força. Altere a funçãoFixedUpdatepara a seguinte:
Em vez de usar o métodoAddForce, estamos usando o métodoMovePosition. Agora estamos traduzindo nosso corpo rígido, que também traduzirá nossa posição de objeto de jogo. Temos que usar o fixedDeltaTime, caso contrário, corremos o risco de que nossas traduções aconteçam muito rapidamente se o FixedUpdate for executado muito rapidamente.
Se você executar o jogo, não deverá obter o efeito de movimento no gelo, mas sim um movimento suave e agradável que para assim que você solta as teclas.
Em ambos os exemplos, o movimento foi limitado às teclas de letras do teclado.
Se você quiser se mover com base nas teclas de letras WASD típicas e nas teclas de seta, você pode fazer algo assim:
O código acima gerará um valor de -1.0, 0.0 ou 1.0 dependendo se a tecla de letra ou tecla de seta correspondente foi pressionada.
Assim como no métodoAddForce, ao usar o métodoMovePosition, as colisões entre o jogador e o obstáculo ainda acontecem.

Conclusão

Você acabou de ver como começar a usar o Unity e criar um jogo 2D simples. É claro que o que vimos neste tutorial não foi um jogo real, mas tem todos os componentes que podem ser aplicados a um jogo real. Isso foi discutido por Karen Huaulme e eu (Nic Raboy) na quarta parte de nossa transmissão de desenvolvimento de jogos no Twitch.
O movimento e as colisões do jogador serão úteis no jogo Plummeting People, pois os jogadores não só precisarão desviar de outros jogadores, mas também de obstáculos, enquanto correm para a linha de chegada.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Integrating MongoDB with TensorFlow and C#


Sep 05, 2024 | 8 min read
Início rápido

Crie seu primeiro aplicativo .NET Core com o MongoDB Atlas


Jun 04, 2024 | 6 min read
Artigo

Realm .NET para Xamarin (melhores práticas e roteiro) no Meetup


Mar 21, 2023 | 38 min read
Início rápido

MongoDB e C Sharp: tutorial de operações CRUD


Sep 23, 2022 | 12 min read
Sumário