[POO] Herança na Unity

Herança é um conceito do paradigma de programação conhecido como Programação Orientada a Objetos , que tem como objetivo construir e trabalhar com abstrações de objetos do mundo real, em um nível de código. A Herança dá a capacidade de uma classe/objeto herdar comportamentos previamente definidos em outra classe, sem a necessidade de duplicação do código, permitindo a extensão e a sobrescrita de comportamentos já existentes, de acordo com a necessidade do novo objeto/classe. Para definir uma relação de herança no C#, a "palavra" reservada : (dois pontos) deve ser utilizada na definição da classe que estamos criando, indicando de qual outra classe o nosso script deve herdar. public class Jogador : MonoBehaviour { // Classe Jogador que herda da classe MonoBehaviour } Por padrão, todos os scripts criados na Unity herdam de MonoBehaviour, que é a classe base da Unity para Scripts que serão associados aos GameObjects do jogo. Embora essa definição de herança

Importando Assets para o Jogo

 E aí, pessoal! Como vão?

Antes de seguirmos com o desenvolvimento dos nossos exemplos, é importante entender como podemos utilizar nossos próprios Assets durante a construção de nossos jogos.

Mas então, lá vem mais uma pergunta...o que são Assets?

Hey, hey, hey! Essa a gente já sabe. Falamos sobre isso lá no começo da nossa jornada, no nosso post Começando na Unity. Mas tudo bem, vamos repetir rapidinho:

Assets são todos os arquivos utilizados para compor o seu jogo, como por exemplo, Sprites (imagens), arquivos de áudio, Scripts (arquivos de código fonte), Modelos 3D, Texturas (imagens para modelos 3D), animações, vídeos e muito mais. Ok?

Adicionando Assets ao projeto

Neste exemplo vamos utilizar Assets criados por Kenney.nl, que podem ser baixados através do site OpenGameArt.org. O projeto desenvolvido também está disponível para download aqui.

Como podemos adicionar Assets ao nosso projeto?

Como já falamos antes, todos os arquivos (assets) ficarão disponíveis para uso no nosso projeto através da aba Project, na Unity. Para que os arquivos possam aparecer nessa aba, basta que eles sejam adicionados na pasta Assets do nosso projeto. Existem diversas formas de adicionar os arquivos na pasta Assets. Uma dessas formas, é utilizar o sistema de arquivos do seu computador e copiar os arquivos que você quer utilizar no seu jogo, dentro da pasta Assets do projeto que criamos. Embora seja um jeito simples, talvez não seja o mais conveniente para todos. Por isso, vou mostrar como podemos fazer isso diretamente pela Unity.

Passos necessário:

  1. Fazer download (link fornecido anteriormente) dos arquivos utilizados no exemplo, ou ter seus próprios assets no computador;
  2. Importar nossos Assets a partir da aba Project na Unity, através do menu de contexto (clicando com o botão direito na aba Project).
Após clicar com o botão direito na aba Project, você deve selecionar a opção Import New Asset... (importar novo asset). Em seguida, você deverá selecionar os arquivos de Assets no seu computador (é importante que você saiba em qual pasta estão esses arquivos).
No exemplo abaixo, os assets utilizados estavam na pasta Downloads/spaceArt/png (pasta png, dentro da pasta spaceArt, dentro da pasta Downloads).

Importando Assets na Unity

Embora vários arquivos estivessem disponíveis para serem impartados, selecionei apenas três imagens da nave espacial:
  • Nave na posição inicial (player)
  • Nave virando para a esquerda (playerLeft)
  • Nave virando para a direita (playerRight)
Dica: Segure a tecla Ctrl (control), do teclado, enquanto seleciona os arquivos, para permitir a seleção de mais de um arquivo ao mesmo tempo.

Para utilizar um Sprite, após ele ter sido importado para o projeto, basta arrastá-lo da aba Project para a aba Hierarchy. Isso fará com que um novo GameObject seja criado para representar a nossa nave.

Utilizando um Asset (Sprite) no jogo

Vamos dar uma olhada no nosso novo GameObject (chamado "player"). Para isso, basta selecioná-lo na Hierarquia do projeto. Ao selecioná-lo, o Inspector será atualizado com as informações do nosso GameObject.

Informações do GameObject "player" no Inspector

Sempre que criamos um GameObject, o componente Transform é automaticamente adicionado. Certo? Dessa vez, nós podemos ver no Inspector que um outro componente chamado SpriteRenderer também foi adicionada ao nosso GameObject. Por que isso aconteceu?

Por que nosso GameObject possui um SpriteRenderer?

Nosso GameObject foi criado a partir de um Sprite, a imagem da nave. Dessa forma, a Unity entende que nós queremos exibir (renderizar) um Sprite (imagem) no nosso jogo. A Unity possui um componente específico para renderizar (exibir) uma imagem (sprite), e esse componente se chama SpriteRenderer.

Se observarmos com atenção, no componente SpriteRenderer existe uma propriedade chamada Sprite. Essa propriedade representa a imagem que o SpriteRenderer deve exibir para o jogador. No nosso exemplo, essa imagem se chama "player" e é a imagem da nossa nave movendo para frente.

Identificação da image (sprite) que será exibida pelo SpriteRenderer


Legal! E o que nós podemos fazer com esses Sprites?

Com esses três sprites em nosso projeto, nós podemos implementar uma animação simples de movimentação, de acordo com a tecla que o jogador pressionar. Que tal?

Para executar essa animação, utilizaremos um script que trocará a imagem (sprite) exibida pelo SpriteRenderer, de acordo com a tecla que está sendo pressionada pelo jogador, em apenas quatro passos:
  1. Utilizar o método Update para verificar a tecla que está sendo pressionada;
  2. Se o jogador pressionar a tela A, exibir a imagem da nave virando para a esquerda;
  3. Se o jogador pressionar a tela D, exibir a imagem da nave virando para a direita;
  4. Se o jogador não pressionar a tela A, nem pressionar a tecla D, exibir a imagem da nave movendo para a frente;
Exemplo de script para a animação de movimentação da nave

O Script desenvolvido está disponível para download, junto dos demais arquivos do projeto. Em caso de dúvidas sobre Componentes e Scripts, você pode acessar o nosso post sobre este assunto, aqui.

Para utilizarmos o script, precisamos adicioná-lo ao nosso GameObject (player), e fazer isso é bem simples, lembra?! Basta arrastar o script da aba Projeto para o nosso GameObject, chamado player.

Adicionando o script da nave ao GameObject (player)

Ao adicionar o script Nave no GameObject player, podemos visualizar no Inspector o nosso novo componente/script com quatro propriedades, ainda sem valor definido (None): Sprite frente, Sprite esquerda, Sprite direita e Sprite Renderer.

Script Nave sendo exibido no Inspector ao selecionar o GameObject player

Cada uma dessas propriedades representa uma variável em nosso script, conforme pode ser visto na imagem abaixo:

Variáveis do script Nave

Antes de utilizarmos o script, nós precisamos definir os valores de cada uma dessas variáveis. Essa definição de valores pode ser feita através da associação dos sprites da nave (na aba Project) e do componente SpriteRenderer com o script que nós criamos. Parece confuso? Calma, é bem simples...

Primeiro, vamos associar o sprites da na nave ao script que nós desenvolvemos. Ok?
Para isso, basta (mais uma vez) arrastar os sprites da nave para cada uma das variáveis do nosso script. A associação deve ser feita da seguinte forma:
  • O sprite chamado player deve ser arrastado para a variável sprite frente.
  • O sprite chamado playerLeft deve ser arrastado para a variável sprite esquerda.
  • O sprite chamado playerRight deve ser arrastado para a variável sprite direta.
Associando os sprites da nave ao script da nave

Em seguida, vamos associar o SpriteRenderer da nossa nave com o nosso Script.
A associação do SpriteRenderer com o script é tão simples quanto a associação dos sprite. A única diferença é que o SpriteRenderer já faz parte do nosso GameObject. Por isso, para fazer essa associação, precisamos arrastar o SpriteRenderer do Inspector para a nossa variável, como pode ser visto abaixo:
Associando o SpriteRenderer da nave ao script da nave

Agora com tudo configurado, podemos apertar o play e testar o nosso exemplo, pressionando as teclas A e D do teclado, alternadamente:

Animação de movimentação da nave

E aí? Gostou?
...deixe o seu comentário com dúvidas e feedbacks. Até mais o/

Comentários

Postagens mais visitadas deste blog

Transição de Fases (navegação entre Cenas) na Unity

GetComponent - Obtendo a referência para outros componentes do GameObject

[POO] Herança na Unity