WEBVTT 00:00:02.194 --> 00:00:05.801 Bem-vindo de volta a série de vídeos do projeto scavengers. 00:00:05.801 --> 00:00:07.801 No vídeo anterior vimos como configurar 00:00:07.801 --> 00:00:10.498 o projeto e demonstrar o jogo finalizado. 00:00:11.442 --> 00:00:13.739 Neste vídeo vamos criar as animações 00:00:13.739 --> 00:00:15.739 para o jogador e inimigos 00:00:15.739 --> 00:00:17.555 baseado no sprite sheet fornecido 00:00:17.555 --> 00:00:21.030 e também configurar os prefabs do jogador e dos inimigos. 00:00:21.568 --> 00:00:23.568 Vamos criar uma nova scene 00:00:26.904 --> 00:00:31.072 e vamos começar criando o prefab do jogador, 00:00:31.072 --> 00:00:33.341 e também as animações que serão utilizadas. 00:00:34.178 --> 00:00:37.309 Vamos clicar em Game Object - Create Empty 00:00:39.328 --> 00:00:41.328 e vamos chamar esse Game Object de Player. 00:00:43.260 --> 00:00:45.777 Na nossa pasta Sprites temos uma sprite sheet, 00:00:45.777 --> 00:00:48.753 que já foi separado 00:00:48.753 --> 00:00:50.387 em múltiplos sprites. 00:00:50.387 --> 00:00:52.934 Para mais informações sobre sprite sheets e 00:00:52.934 --> 00:00:54.934 sprites você pode ler a informação no link abaixo. 00:00:55.309 --> 00:00:57.309 Neste caso vamos selecionar o 00:00:57.309 --> 00:01:00.148 primeiro conjunto de frames, 00:01:00.148 --> 00:01:01.543 que são a animação do jogador parado, 00:01:01.543 --> 00:01:03.543 e eu fiz isso clicando no primeiro frame e depois 00:01:03.543 --> 00:01:05.726 shift-click no último frame que eu quero. 00:01:05.726 --> 00:01:07.726 Eu vou clicar nos sprites selecionados e arrastá-los 00:01:07.726 --> 00:01:09.188 para o player prefab. 00:01:09.784 --> 00:01:11.386 E agora vamos dar um nome para a animação, 00:01:11.386 --> 00:01:14.109 vamos chamá-la de PlayerIdle, 00:01:14.109 --> 00:01:15.879 esta é a animação que será executada quando 00:01:15.879 --> 00:01:17.792 o jogador não está fazendo nada. 00:01:17.792 --> 00:01:20.467 Vamos colocar a animação na pasta Animations. 00:01:21.380 --> 00:01:23.380 Você irá notar que quando fizemos isso que dois components 00:01:23.380 --> 00:01:25.911 foram adicionados ao game object, um sprite renderer, 00:01:25.911 --> 00:01:28.585 que irá desenhar o sprite atual da animação. 00:01:28.585 --> 00:01:33.106 E um animator que irá permitir que nós controlemos a execução da animação. 00:01:33.106 --> 00:01:35.106 Quando arrastamos os frames, estes dois 00:01:35.106 --> 00:01:37.890 componentes foram adicionados, a Unity pedir que salvemos 00:01:37.890 --> 00:01:41.581 a animação, que foi salva na pasta Animations. 00:01:41.975 --> 00:01:45.150 Também foi criado o que chamamdos de animator controller, 00:01:45.150 --> 00:01:47.150 que irá nos permitir gerenciar qual 00:01:47.150 --> 00:01:48.938 animação está sendo executada. 00:01:48.938 --> 00:01:52.103 Vamos movê-lo para nossa pasta Animator Controllers 00:01:52.775 --> 00:01:55.244 E iremos adicionar mais algumas animações ao player. 00:01:55.907 --> 00:01:57.340 Vamos voltar aos sprites. 00:01:58.109 --> 00:02:00.493 E agora irei selecionar 00:02:01.647 --> 00:02:05.141 os dois frames da animação PlayerChop, 00:02:05.141 --> 00:02:06.519 arraste-os para o player, 00:02:07.410 --> 00:02:09.410 e vamos chamá-la de PlayerChop. 00:02:10.102 --> 00:02:12.860 Vamos colocar esta animação na pasta Animations. 00:02:16.985 --> 00:02:18.985 Agora perceba que quando fizemos isso, não foi adicionado 00:02:18.985 --> 00:02:20.985 outro animator controller, ao invés disso 00:02:20.985 --> 00:02:24.008 esta animação foi adicionada ao animator controller 00:02:24.008 --> 00:02:26.249 que já existe no player. 00:02:26.249 --> 00:02:29.117 Vamos repetir este processo para a animação PlayerHit. 00:02:34.021 --> 00:02:36.730 E em seguida podemos verificar se está funcionando corretamente. 00:02:40.288 --> 00:02:42.626 Como podemos ver, nosso player tem a animação quando está parado, 00:02:42.626 --> 00:02:44.626 mas ela está um pouco rápida 00:02:44.626 --> 00:02:46.626 o que vamos fazer é abrir 00:02:46.626 --> 00:02:50.142 o animator controller referenciado clicando duas vezes nele, 00:02:51.527 --> 00:02:53.930 selecionar o estado PlayerIdle 00:02:53.930 --> 00:02:56.782 e vamos alterar a velocidade da animação para 0.5, 00:02:56.782 --> 00:02:59.492 que é metade da velocidade normal da animação. 00:02:59.492 --> 00:03:01.492 Perceba que as outras duas animações 00:03:01.492 --> 00:03:03.128 foram adicionadas como estados, 00:03:03.128 --> 00:03:05.128 e mais para a frente na série de vídeos iremos 00:03:05.128 --> 00:03:07.380 ver como controlar a mudança 00:03:07.380 --> 00:03:09.659 entre estes estados via script. 00:03:10.140 --> 00:03:11.428 Vamos verificar agora. 00:03:14.255 --> 00:03:15.380 Muito bem. 00:03:17.418 --> 00:03:19.418 Com as animações para o player feitas 00:03:19.418 --> 00:03:21.418 vamos agora aplicar 00:03:21.418 --> 00:03:24.699 uma tag ao player, chamada Player. 00:03:24.699 --> 00:03:26.853 A tag Player já está pré-criada em 00:03:26.853 --> 00:03:29.440 todos os projetos da Unity, nós também acrescentamos 00:03:29.440 --> 00:03:32.332 algumas tags adicionais, food, exit, 00:03:32.332 --> 00:03:33.929 enemy e soda. 00:03:33.929 --> 00:03:35.929 Fizemos isso clicando em Add Tag 00:03:38.496 --> 00:03:41.653 e digitando os nomes nos campos. 00:03:42.576 --> 00:03:45.362 Vamos configurar a tag Player 00:03:45.362 --> 00:03:47.487 e vamos também configurar a layer. 00:03:47.487 --> 00:03:49.314 Aqui temos as layers default, 00:03:49.314 --> 00:03:52.637 e acrescentamos uma layer adicional chamada Blocking. 00:03:52.637 --> 00:03:54.637 Esta é a layer onde todas 00:03:54.637 --> 00:03:56.637 as colisões serão checadas 00:03:56.637 --> 00:03:58.637 portanto vamos selecionar esta layer 00:03:58.637 --> 00:04:00.637 para o player, e criamos ela da mesma maneira, 00:04:00.935 --> 00:04:03.707 selecionando Add Jayer e digitando o nome. 00:04:03.707 --> 00:04:06.264 Vamos selecionar a layer Blocking. 00:04:06.264 --> 00:04:08.264 Vamos adicionar mais uma layer 00:04:08.264 --> 00:04:10.264 relacionada ao jogador, ou seja 00:04:10.264 --> 00:04:13.088 vamos configurar a layer para o sprite renderer. 00:04:13.088 --> 00:04:15.840 Temos algumas layers pré-definidas, 00:04:15.840 --> 00:04:19.048 A layer Floor, que será para o nosso cenário. 00:04:19.048 --> 00:04:21.048 A layer Item que será renderizada na frente 00:04:21.048 --> 00:04:23.483 do cenário, que será utilizada pela comida e pelo refrigerante. 00:04:23.483 --> 00:04:26.457 E uma layer Units para o player e os inimigos. 00:04:26.457 --> 00:04:29.356 Vamos associar a player a layer Units. 00:04:29.592 --> 00:04:32.390 Depois vamos adicionar dois components 00:04:32.390 --> 00:04:35.580 ao player, vamos adicionar um box collider 2D 00:04:35.580 --> 00:04:37.580 e um rigidbody 2D. 00:04:37.580 --> 00:04:39.580 O box collider 2D irá nos permitir 00:04:39.580 --> 00:04:41.580 verificar colisões contra o player. 00:04:41.953 --> 00:04:43.953 E o rigidbody 2D nos irá permitir 00:04:43.953 --> 00:04:46.586 mover o player usando o sistema de física da Unity. 00:04:46.959 --> 00:04:50.012 Vamos configurar o rigidbody 2D para Is Kinematic 00:04:50.012 --> 00:04:52.012 já que não queremos o player voando 00:04:52.012 --> 00:04:54.012 e quicando pelo cenário, nós apenas vamos movê-lo 00:04:54.012 --> 00:04:56.831 no grid de espaços do nosso cenário. 00:04:56.831 --> 00:04:59.155 E vamos controlar o movimento usando um script 00:04:59.155 --> 00:05:01.155 e configurando como Is Kinematic. 00:05:01.446 --> 00:05:03.446 Vamos tambem ajustar o tamanho do 00:05:03.446 --> 00:05:05.446 nosso box collider 2D 00:05:05.446 --> 00:05:07.446 fazendo com que ele fique um pouco menor para que o 00:05:07.446 --> 00:05:09.446 player não colida acidentalmente com 00:05:09.446 --> 00:05:11.898 objetos nos espaços adjacentes, 00:05:11.898 --> 00:05:14.391 apenas quando tentarmos mover para um espaço 00:05:14.391 --> 00:05:16.507 já ocupado por outro collider. 00:05:16.507 --> 00:05:18.507 Há outros componentes que iremos adicionar ao 00:05:18.507 --> 00:05:21.159 player conforme desenvolvemos ele, mas por enquanto este é um bom ponto de partida. 00:05:21.159 --> 00:05:23.159 Agora vamos selecionar o player 00:05:23.159 --> 00:05:26.763 e arrastá-lo para nossa pasta Prefabs para criar um prefab. 00:05:27.369 --> 00:05:29.253 Com o prefab criado 00:05:29.253 --> 00:05:31.860 podemos remover temporariamente o player da hierarquia 00:05:31.860 --> 00:05:33.860 e agora vamos criar nosso primeiro inimigo. 00:05:34.151 --> 00:05:37.055 Vamos clicar em Game Object - Create Empty 00:05:37.055 --> 00:05:39.113 e vamos chamá-lo de Enemy1. 00:05:39.113 --> 00:05:42.650 Vamos começar acrescentando animações ao Enemy1. 00:05:42.650 --> 00:05:44.250 Vamos voltar para os sprites 00:05:44.833 --> 00:05:47.832 shift-click nos frames da animação EnemyIdle 00:05:47.832 --> 00:05:49.159 e arraste-os. 00:05:50.391 --> 00:05:52.391 Vamos chamar de Enemy1Idle. 00:05:52.659 --> 00:05:54.554 This is going to automatically add the components that Automaticamente os componentes necessários 00:05:54.554 --> 00:05:56.554 serão adicionados e iremos acrescentar os outros 00:05:56.554 --> 00:05:58.554 frames de nossa animação. 00:06:02.071 --> 00:06:04.071 Adicione a animação Attack. 00:06:05.981 --> 00:06:07.981 Podemos verificar que as animações estão funcionando. 00:06:11.265 --> 00:06:12.813 Aí esta. 00:06:13.975 --> 00:06:18.123 Agora também vamos acrescentar um box collider e um rigidbody. 00:06:24.389 --> 00:06:26.389 Também vamos configurar o rigidbody do Enemy 00:06:26.389 --> 00:06:28.272 para Is Kinematic 00:06:28.272 --> 00:06:30.543 e vamos configurar a tag Enemy 00:06:30.543 --> 00:06:33.207 e configurar o Enemy para a layer Blocking. 00:06:33.207 --> 00:06:37.084 Vamos também configurar o sorting layer do sprite renderer para Units. 00:06:41.172 --> 00:06:43.172 Isto feito vamos arrastar o Enemy 00:06:43.172 --> 00:06:45.172 para criar o prefab do primeiro inimigo. 00:06:48.944 --> 00:06:51.073 Mas ao invés de apagar o inimigo nós vamos apenas 00:06:51.073 --> 00:06:53.073 modificá-lo para criar o segundo inimigo. 00:06:53.981 --> 00:06:55.981 Renomeie-o para Enemy2. 00:06:59.032 --> 00:07:00.870 E vamos arrastar 00:07:00.870 --> 00:07:02.870 os frames da animação Enemy2Idle. 00:07:12.188 --> 00:07:14.188 E da animação Enemy2Attack. 00:07:20.943 --> 00:07:23.464 Quando arrastamos a animação 00:07:23.464 --> 00:07:26.704 para o inimigo criamos um novo animator controller. 00:07:26.704 --> 00:07:30.603 Vamos movê-lo para a pasta Animator Controllers. 00:07:30.603 --> 00:07:34.260 Agora vamos abrir o animator controller do Enemy1 00:07:34.260 --> 00:07:36.260 e podemos ver que todas as 00:07:36.260 --> 00:07:39.185 animações foram acrescentadas como estados. 00:07:39.185 --> 00:07:40.732 Agora o que nós vamos fazer é 00:07:40.732 --> 00:07:43.422 apagar os estados relativos ao Enemy2 00:07:43.422 --> 00:07:45.422 para isso, fazemos shift-click em cada estado 00:07:45.422 --> 00:07:48.892 e depois clicamos com o botão direto para apagar. 00:07:49.498 --> 00:07:51.498 Agora a Unity vai perguntar se queremos apagar os assets selecionados 00:07:51.498 --> 00:07:53.498 escolha "Delete" 00:07:55.093 --> 00:07:57.407 E fizemos isso porque 00:07:57.407 --> 00:07:59.407 Enemy1 e Enemy2 irão compartilhar 00:07:59.407 --> 00:08:02.800 a mesma máquina de estados, pois ambos tem os mesmos dois estados 00:08:02.800 --> 00:08:04.730 Idle e Attack. 00:08:04.730 --> 00:08:06.730 O que vamos fazer agora é criar o que chamamos de 00:08:06.730 --> 00:08:08.730 animator override controller, 00:08:09.394 --> 00:08:12.734 que nos vai permitir utilizar a mesma máquina de estados 00:08:12.734 --> 00:08:14.629 e o mesmo script para controle 00:08:14.629 --> 00:08:16.629 mas executar animações diferentes 00:08:16.629 --> 00:08:18.453 em cada um dos estados. 00:08:18.453 --> 00:08:19.950 Então vamos selecionar 00:08:19.950 --> 00:08:23.629 Create - Animator Override Controller. 00:08:27.367 --> 00:08:29.367 Vamos chamar de Enemy2 00:08:29.740 --> 00:08:31.740 E a primeira coisa que vamos fazer é especificar 00:08:31.740 --> 00:08:34.645 qual controller vai ser afetado pelo override, 00:08:34.645 --> 00:08:37.499 selecionamos o controller do Enemy1 e arrastá-lo. 00:08:39.292 --> 00:08:41.292 E aqui estão as duas 00:08:41.292 --> 00:08:43.951 animações originais que iremos executar, 00:08:43.951 --> 00:08:46.619 Enemy1Idle e Enemy1Attack, 00:08:46.619 --> 00:08:49.206 e nos vamos substituí-las por 00:08:49.807 --> 00:08:51.807 Enemy2Attack 00:08:54.101 --> 00:08:56.101 e Enemy2Idle. 00:08:58.546 --> 00:09:00.546 E no Enemy2 iremos mudar 00:09:00.546 --> 00:09:02.546 o animator controller para agora 00:09:02.546 --> 00:09:05.591 utilizar o animator override controller. 00:09:11.251 --> 00:09:13.251 Agora se executamos a cena. 00:09:15.907 --> 00:09:16.956 Aí está. 00:09:18.419 --> 00:09:22.616 Finalmente vamos arrastar Enemy2 para a pasta Prefabs 00:09:23.897 --> 00:09:25.510 para criar um novo prefab. 00:09:25.510 --> 00:09:28.348 Em seguida vamos apagar Enemy2 da hierarquia 00:09:28.348 --> 00:09:30.348 e salvar a cena. 00:09:31.373 --> 00:09:32.999 Vamos chamá-la de Main 00:09:32.999 --> 00:09:35.929 e salvá-la na nossa pasta Scenes. 00:09:36.826 --> 00:09:39.291 Agora que temos nossos prefabs básicos criados 00:09:39.291 --> 00:09:41.773 para o Player e nossos inimigos 00:09:41.773 --> 00:09:43.773 agora vamos criar os outros 00:09:43.773 --> 00:09:46.680 prefabs, e vamos também criar o layout do nosso cenário. 00:09:46.680 --> 00:09:48.680 No próximo vídeo vamos criar 00:09:48.680 --> 00:09:52.753 os prefabs do chão, paredes, comida, refrigerante 00:09:52.753 --> 00:09:54.753 e saída.