
Este livro é dirigido a todos que desejam criar jogos, mas não têm experiência anterior em desenvolvimento. O Unity suporta várias linguagens de programação. Neste livro, usaremos C #. Antes de começar a criar jogos, você precisa entender os conceitos básicos de design, bem como o próprio mecanismo de jogo Unity, portanto, na primeira parte do livro, estudaremos essas questões. Na segunda e terceira partes, consideraremos o processo de criação de jogos bidimensionais e tridimensionais, respectivamente, e na quarta parte falaremos sobre outros recursos do Unity, cujo conhecimento será útil para você.
6. A implementação da jogabilidade com armadilhas e objetivos
Armadilhas simplesA maior parte deste jogo consiste em lidar com os toques de vários objetos - armadilhas, tesouros, pontos de saída etc. Considerando a importância de determinar quando tocar em objetos específicos, criaremos um script comum que gera um Evento de Unidade quando qualquer objeto com a tag "Player" os tocar. Esse evento será configurado de maneira diferente para diferentes objetos: as armadilhas informarão o Game Manager que o gnomo recebeu dano, o tesouro informará que o gnomo pegou o tesouro, e o ponto de saída é que o gnomo chegou à saída.
Agora crie um novo script C # em um arquivo chamado SignalOnTouch.cs e adicione o seguinte código:
using UnityEngine.Events; // UnityEvent, "Player" // . [RequireComponent (typeof(Collider2D))] public class SignalOnTouch : MonoBehaviour { // UnityEvent . // . public UnityEvent onTouch; // true, AudioSource. public bool playAudioOnTouch = true; // , // SendSignal. void OnTriggerEnter2D(Collider2D collider) { SendSignal (collider.gameObject); } // , // SendSignal. void OnCollisionEnter2D(Collision2D collision) { SendSignal (collision.gameObject); } // "Player" // UnityEvent, . void SendSignal(GameObject objectThatHit) { // "Player"? if (objectThatHit.CompareTag("Player")) { // , if (playAudioOnTouch) { var audio = GetComponent<AudioSource>(); // // , // if (audio && audio.gameObject.activeInHierarchy) audio.Play(); } // onTouch.Invoke(); } } }
A classe SignalOnTouch é baseada no método SendSignal, chamado pelos métodos OnCollisionEnter2D e OnTriggerEnter2D. Os dois últimos métodos são chamados pelo mecanismo do Unity quando o objeto toca o colisor ou quando o objeto se enquadra no escopo do gatilho. O método SendSignal verifica a tag do objeto e, se ele armazena a string "Player", gera um evento Unity.
Agora que você tem a classe SignalOnTouch, pode adicionar a primeira interceptação.
1. Importe sprites de objetos. Importe o conteúdo da pasta Sprites / Objetos para o projeto.
2. Adicione os picos marrons. Encontre o sprite SpikesBrown e arraste-o para a cena.
3. Configure o objeto com espinhos. Adicione os componentes PolygonCollider2D e SignalOnTouch ao objeto perfurado.
Adicione uma nova função ao evento SignalOnTouch. Arraste o Game Manager para o campo de objeto e selecione a função GameManager.TrapTouched, conforme mostrado na Fig. 6.1
4. Converta o objeto cravado em um modelo. Arraste o objeto SpikesBrown do painel Hierarquia para a pasta Level. Como resultado, será criado um modelo com o qual você pode criar várias cópias do objeto.
5. Teste. Inicie o jogo. Faça o gnomo acertar os espinhos. Este gnomo deve cair e reaparecer!
Tesouro e saída
Depois de adicionar com sucesso a armadilha que mata o gnomo, é hora de adicionar a oportunidade de ganhar o jogo. Para fazer isso, adicione dois novos elementos: um tesouro e um ponto de saída.
Um tesouro é um sprite no fundo de um poço que detecta o toque de um gnomo e envia um sinal ao Game Manager. Quando isso acontece, o gerente do jogo diz ao gnomo que ele pegou o tesouro, após o que o sprite com a imagem da mão vazia do gnomo é substituído pelo sprite com a imagem da mão segurando o tesouro.
Um ponto de saída é outro sprite localizado no topo do poço. Como um tesouro, ele detecta um toque do gnomo e notifica o gerente do jogo sobre isso. Se neste momento o gnomo possuir o tesouro, o jogador recebe a vitória no jogo.
O principal trabalho desses dois objetos é realizado pelo componente SignalOnTouch - quando o gnomo atinge o ponto de saída, o método ExitReached do gerente do jogo deve ser chamado e, quando o gnomo toca o tesouro, o método TreasureCollected deve ser chamado.
Vamos começar criando um ponto de saída e, em seguida, adicione um tesouro.
Criar ponto de saída
Antes de tudo, importamos sprites.
1. Nível de importação de sprites em segundo plano. Copie a pasta Sprites / Plano de fundo do pacote baixado com recursos para a pasta Sprites do projeto.
2. Adicione um sprite Top. Coloque-o logo abaixo do objeto Corda. Este sprite servirá como um ponto de saída.
3. Configure o sprite. Adicione o componente Box Collider 2D ao sprite e marque a caixa Is Trigger. Clique no botão Editar colisor e redimensione o colisor para que ele seja curto e largo, conforme mostrado na Fig. 6.2
4. Configure o envio de um sinal para o gerente do jogo no momento de tocar no sprite. Adicione o componente SignalOnTouch ao sprite. Adicione um item à lista de eventos do componente e conecte-o ao Game Manager. Selecione a função GameManager.ExitReached. Agora, tocar no gnome de saída chamará o método ExitReached do Game Manager.
Agora adicione o tesouro.
O tesouro funciona assim: por padrão, o objeto Treasure exibe um sprite com a imagem do tesouro. Quando o gnomo toca nele, o método TreasureCollected do Game Manager é chamado e outro sprite é exibido no lugar do tesouro, mostrando que o tesouro foi recolhido. Quando o gnomo morre, o objeto Treasure retorna ao seu estado original e exibe o sprite com a imagem do tesouro novamente.
Como a mudança de sprites no jogo será realizada com bastante frequência - você verá isso quando melhoraremos os gráficos - faz sentido criar uma classe universal para alterar sprites e usá-la no objeto tesouro.
Crie um novo script C # chamado SpriteSwapper.cs. Adicione o seguinte código a ele:
// . , // ' ' ' '. public class SpriteSwapper : MonoBehaviour { // , . public Sprite spriteToUse; // , // . public SpriteRenderer spriteRenderer; // . ResetSprite. private Sprite originalSprite; // . public void SwapSprite() { // ... if (spriteToUse != spriteRenderer.sprite) { // originalSprite originalSprite = spriteRenderer.sprite; // . spriteRenderer.sprite = spriteToUse; } } // . public void ResetSprite() { // ... if (originalSprite != null) { // ... . spriteRenderer.sprite = originalSprite; } } }
A classe SpriteSwapper foi projetada para duas operações: quando o método SwapSprite é chamado, outro Sprite é passado para o visualizador SpriteRenderer conectado ao objeto do jogo para exibição. Nesse caso, o sprite original é armazenado em uma variável. Quando o método ResetSprite é chamado, o visualizador recebe o sprite original para exibir.
Agora você pode criar e personalizar o objeto Treasure.
1. Adicione um sprite com uma imagem do tesouro. Encontre o sprite TreasurePresent e adicione-o à cena. Coloque-o perto do fundo, mas de maneira que o gnomo possa pegá-lo.
2. Adicione um colisor para o tesouro. Selecione o sprite com a imagem do tesouro e adicione o componente 2D do Box Collider. Marque a caixa É acionador.
3. Adicione e configure um script para alterar o sprite. Adicione o componente SpriteSwapper. Arraste o sprite com a imagem do tesouro para o campo Sprite Renderer deste componente. Em seguida, encontre o sprite TreasureAbsent e arraste-o para o campo Sprite To Use do trocador de sprites.
4. Adicione e configure o componente de envio de sinal em resposta a um toque. Adicione o componente SignalOnTouch. Adicione dois itens à lista On Touch:
- primeiro link para o objeto Game Manager e selecione o método GameManager.TreasureCollected;
- associe o segundo ao sprite do tesouro (ou seja, ao objeto que você está configurando no momento) e selecione o método SpriteSwapper.SwapSprite.
5. Adicione e configure o componente Reinicializável. Adicione um componente redefinível ao objeto. Adicione um único item à lista On Touch, selecione o método SpriteSwapper.ResetSprite e associe-o ao objeto Treasure.
Como resultado, as configurações no painel do inspetor devem parecer como mostrado na Fig. 6.3
6. Teste o jogo. Inicie o jogo e toque no tesouro. Nesse momento, o tesouro desaparecerá; se depois que o gnomo morrer, o tesouro reaparecerá em seu lugar após a criação do novo gnomo.
Adicionando plano de fundo
Atualmente, o jogo ocorre contra um fundo azul opaco definido por padrão no Unity. Nesta seção, adicionaremos um plano de fundo temporário, que substituiremos por um sprite de plano de fundo quando começarmos a melhorar o design gráfico do jogo.
1. Adicione um retângulo de fundo. Abra o menu GameObject e selecione 3D ObjectQuad (3D ObjectRectangle). Nomeie o novo objeto Background.
2. Mova o plano de fundo para o plano de fundo. Para evitar a situação em que um plano de fundo retangular será desenhado no topo dos sprites do jogo, mova-o para o plano de fundo, longe da câmera. Para fazer isso, defina a coordenada Z do retângulo como 10.
3. Defina a largura e a altura do retângulo de fundo. Ligue a ferramenta Rect pressionando a tecla T e use as alças para definir as dimensões do retângulo. A borda superior do plano de fundo deve estar no mesmo nível do sprite no topo da cena e no fundo com o tesouro (Fig. 6.4).
4. Teste o jogo. Após o início, o fundo do campo de jogo deve ficar cinza escuro.
»Mais informações sobre o livro podem ser encontradas no
site do editor»
Conteúdo»
TrechoCupom de desconto de 20% para vendedores ambulantes -
Unity