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