-
Bem-vindo de volta a série de vídeos do projeto scavengers.
-
No vídeo anterior vimos como configurar
-
o projeto e demonstrar o jogo finalizado.
-
Neste vídeo vamos criar as animações
-
para o jogador e inimigos
-
baseado no sprite sheet fornecido
-
e também configurar os prefabs do jogador e dos inimigos.
-
Vamos criar uma nova scene
-
e vamos começar criando o prefab do jogador,
-
e também as animações que serão utilizadas.
-
Vamos clicar em Game Object - Create Empty
-
e vamos chamar esse Game Object de Player.
-
Na nossa pasta Sprites temos uma sprite sheet,
-
que já foi separado
-
em múltiplos sprites.
-
Para mais informações sobre sprite sheets e
-
sprites você pode ler a informação no link abaixo.
-
Neste caso vamos selecionar o
-
primeiro conjunto de frames,
-
que são a animação do jogador parado,
-
e eu fiz isso clicando no primeiro frame e depois
-
shift-click no último frame que eu quero.
-
Eu vou clicar nos sprites selecionados e arrastá-los
-
para o player prefab.
-
E agora vamos dar um nome para a animação,
-
vamos chamá-la de PlayerIdle,
-
esta é a animação que será executada quando
-
o jogador não está fazendo nada.
-
Vamos colocar a animação na pasta Animations.
-
Você irá notar que quando fizemos isso que dois components
-
foram adicionados ao game object, um sprite renderer,
-
que irá desenhar o sprite atual da animação.
-
E um animator que irá permitir que nós controlemos a execução da animação.
-
Quando arrastamos os frames, estes dois
-
componentes foram adicionados, a Unity pedir que salvemos
-
a animação, que foi salva na pasta Animations.
-
Também foi criado o que chamamdos de animator controller,
-
que irá nos permitir gerenciar qual
-
animação está sendo executada.
-
Vamos movê-lo para nossa pasta Animator Controllers
-
E iremos adicionar mais algumas animações ao player.
-
Vamos voltar aos sprites.
-
E agora irei selecionar
-
os dois frames da animação PlayerChop,
-
arraste-os para o player,
-
e vamos chamá-la de PlayerChop.
-
Vamos colocar esta animação na pasta Animations.
-
Agora perceba que quando fizemos isso, não foi adicionado
-
outro animator controller, ao invés disso
-
esta animação foi adicionada ao animator controller
-
que já existe no player.
-
Vamos repetir este processo para a animação PlayerHit.
-
E em seguida podemos verificar se está funcionando corretamente.
-
Como podemos ver, nosso player tem a animação quando está parado,
-
mas ela está um pouco rápida
-
o que vamos fazer é abrir
-
o animator controller referenciado clicando duas vezes nele,
-
selecionar o estado PlayerIdle
-
e vamos alterar a velocidade da animação para 0.5,
-
que é metade da velocidade normal da animação.
-
Perceba que as outras duas animações
-
foram adicionadas como estados,
-
e mais para a frente na série de vídeos iremos
-
ver como controlar a mudança
-
entre estes estados via script.
-
Vamos verificar agora.
-
Muito bem.
-
Com as animações para o player feitas
-
vamos agora aplicar
-
uma tag ao player, chamada Player.
-
A tag Player já está pré-criada em
-
todos os projetos da Unity, nós também acrescentamos
-
algumas tags adicionais, food, exit,
-
enemy e soda.
-
Fizemos isso clicando em Add Tag
-
e digitando os nomes nos campos.
-
Vamos configurar a tag Player
-
e vamos também configurar a layer.
-
Aqui temos as layers default,
-
e acrescentamos uma layer adicional chamada Blocking.
-
Esta é a layer onde todas
-
as colisões serão checadas
-
portanto vamos selecionar esta layer
-
para o player, e criamos ela da mesma maneira,
-
selecionando Add Jayer e digitando o nome.
-
Vamos selecionar a layer Blocking.
-
Vamos adicionar mais uma layer
-
relacionada ao jogador, ou seja
-
vamos configurar a layer para o sprite renderer.
-
Temos algumas layers pré-definidas,
-
A layer Floor, que será para o nosso cenário.
-
A layer Item que será renderizada na frente
-
do cenário, que será utilizada pela comida e pelo refrigerante.
-
E uma layer Units para o player e os inimigos.
-
Vamos associar a player a layer Units.
-
Depois vamos adicionar dois components
-
ao player, vamos adicionar um box collider 2D
-
e um rigidbody 2D.
-
O box collider 2D irá nos permitir
-
verificar colisões contra o player.
-
E o rigidbody 2D nos irá permitir
-
mover o player usando o sistema de física da Unity.
-
Vamos configurar o rigidbody 2D para Is Kinematic
-
já que não queremos o player voando
-
e quicando pelo cenário, nós apenas vamos movê-lo
-
no grid de espaços do nosso cenário.
-
E vamos controlar o movimento usando um script
-
e configurando como Is Kinematic.
-
Vamos tambem ajustar o tamanho do
-
nosso box collider 2D
-
fazendo com que ele fique um pouco menor para que o
-
player não colida acidentalmente com
-
objetos nos espaços adjacentes,
-
apenas quando tentarmos mover para um espaço
-
já ocupado por outro collider.
-
Há outros componentes que iremos adicionar ao
-
player conforme desenvolvemos ele, mas por enquanto este é um bom ponto de partida.
-
Agora vamos selecionar o player
-
e arrastá-lo para nossa pasta Prefabs para criar um prefab.
-
Com o prefab criado
-
podemos remover temporariamente o player da hierarquia
-
e agora vamos criar nosso primeiro inimigo.
-
Vamos clicar em Game Object - Create Empty
-
e vamos chamá-lo de Enemy1.
-
Vamos começar acrescentando animações ao Enemy1.
-
Vamos voltar para os sprites
-
shift-click nos frames da animação EnemyIdle
-
e arraste-os.
-
Vamos chamar de Enemy1Idle.
-
This is going to automatically add the components that
Automaticamente os componentes necessários
-
serão adicionados e iremos acrescentar os outros
-
frames de nossa animação.
-
Adicione a animação Attack.
-
Podemos verificar que as animações estão funcionando.
-
Aí esta.
-
Agora também vamos acrescentar um box collider e um rigidbody.
-
Também vamos configurar o rigidbody do Enemy
-
para Is Kinematic
-
e vamos configurar a tag Enemy
-
e configurar o Enemy para a layer Blocking.
-
Vamos também configurar o sorting layer do sprite renderer para Units.
-
Isto feito vamos arrastar o Enemy
-
para criar o prefab do primeiro inimigo.
-
Mas ao invés de apagar o inimigo nós vamos apenas
-
modificá-lo para criar o segundo inimigo.
-
Renomeie-o para Enemy2.
-
E vamos arrastar
-
os frames da animação Enemy2Idle.
-
E da animação Enemy2Attack.
-
Quando arrastamos a animação
-
para o inimigo criamos um novo animator controller.
-
Vamos movê-lo para a pasta Animator Controllers.
-
Agora vamos abrir o animator controller do Enemy1
-
e podemos ver que todas as
-
animações foram acrescentadas como estados.
-
Agora o que nós vamos fazer é
-
apagar os estados relativos ao Enemy2
-
para isso, fazemos shift-click em cada estado
-
e depois clicamos com o botão direto para apagar.
-
Agora a Unity vai perguntar se queremos apagar os assets selecionados
-
escolha "Delete"
-
E fizemos isso porque
-
Enemy1 e Enemy2 irão compartilhar
-
a mesma máquina de estados, pois ambos tem os mesmos dois estados
-
Idle e Attack.
-
O que vamos fazer agora é criar o que chamamos de
-
animator override controller,
-
que nos vai permitir utilizar a mesma máquina de estados
-
e o mesmo script para controle
-
mas executar animações diferentes
-
em cada um dos estados.
-
Então vamos selecionar
-
Create - Animator Override Controller.
-
Vamos chamar de Enemy2
-
E a primeira coisa que vamos fazer é especificar
-
qual controller vai ser afetado pelo override,
-
selecionamos o controller do Enemy1 e arrastá-lo.
-
E aqui estão as duas
-
animações originais que iremos executar,
-
Enemy1Idle e Enemy1Attack,
-
e nos vamos substituí-las por
-
Enemy2Attack
-
e Enemy2Idle.
-
E no Enemy2 iremos mudar
-
o animator controller para agora
-
utilizar o animator override controller.
-
Agora se executamos a cena.
-
Aí está.
-
Finalmente vamos arrastar Enemy2 para a pasta Prefabs
-
para criar um novo prefab.
-
Em seguida vamos apagar Enemy2 da hierarquia
-
e salvar a cena.
-
Vamos chamá-la de Main
-
e salvá-la na nossa pasta Scenes.
-
Agora que temos nossos prefabs básicos criados
-
para o Player e nossos inimigos
-
agora vamos criar os outros
-
prefabs, e vamos também criar o layout do nosso cenário.
-
No próximo vídeo vamos criar
-
os prefabs do chão, paredes, comida, refrigerante
-
e saída.