Ir para conteúdo
Sistema de Servidores de Jogos ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

[Tutorial] Unity 2D Flappy Bird


Posts Recomendados

unity_flappy_bird.png

 

Prefácio

Neste Tutorial, aprenderemos o quão fácil é fazer um jogo como Flappy Bird no Unity.

É necessário se cadastrar para acessar o conteúdo.
foi lançado em 2013 e tornou-se a aplicação iOS mais baixados em janeiro de 2014.

 

O gamedesign é muito simples: um pássaro deve voar horizontalmente entre os obstáculos, e o jogador pode pressionar um botão para fazer a aba do pássaro e voar para cima. Jogos simples como esse são sempre perfeitos para um Tutorial, tudo o que precisamos são 40 linhas de código e alguns sprites.

 

Como de costume, tudo será explicado o mais fácil possível para que todos possam entender.

 

Configuração do projeto

Vamos lá. Vamos iniciar o Unity e selecionar Novo projeto :

new_project.png

 

Vamos nomeá-lo flappybird , selecione qualquer local como C: \ , selecione 2D e clique em Criar projeto :

project_wizard_create_2d.png

 

Se selecionarmos a Câmera Principal na Hierarquia, então podemos definir a Cor de Fundo em um azul claro (R = 198, G = 208, B = 230) para a cor do céu e ajustar o Tamanho como mostrado na seguinte imagem:

camera_properties.png

 

O fundo

Começaremos por desenhar um fundo de céu muito simples em nossa ferramenta de desenho de escolha:

background.png

Nota: clique com o botão direito do mouse na imagem, selecione Salvar como ... , navegue até a pasta de assets do projeto e salve-o em uma nova pasta Sprites .

 

Depois de salvá-lo, podemos selecionar o plano de fundo na área do projeto :

background_projectarea.png

 

E, em seguida, modifique as Configurações de Importação no Inspetor :

background_importsettings.png

Nota: um valor de Pixels por unidade de 16 significa que 16 x 16 pixels se encaixam em uma unidade no mundo do jogo. Usaremos esse valor para todas as nossas texturas, pois o Pássaro terá 16 x 16 pixels, o que deverá ser 1 unidade no mundo do jogo.

 

Tudo bem, então, adicione o plano de fundo ao mundo do jogo arrastando-o da Área do Projeto para a Câmera Principal na Hierarquia:

background_to_hierarchy.png

 

Para que o fundo se torne um filho da câmera principal :

background_under_camera.png

 

Agora que o fundo é um filho da câmera, sempre irá onde a câmera vai.Ou, em outras palavras, o jogador sempre verá o plano de fundo.

Nota: também podemos colocar vários fundos ao lado do outro, de modo que ainda há um fundo quando a câmera se move horizontalmente, mas torná-lo um filho da câmera é muito mais fácil.

 

Vamos dar uma olhada no inspetor e posicionar o fundo uma unidade mais baixa em Y = -1 , apenas para que ele se ajuste ao resto do jogo mais tarde:

background_position.png

 

Se pressionarmos Play , podemos ver o céu de fundo:

background_inscene.png

 

Há mais um ajuste a ser feito aqui. Vamos adicionar o pássaro e alguns obstáculos em breve, então vamos também ter certeza de que o plano de fundo é realmente desenhado por trás de tudo o resto. O Unity usa as propriedades de Camada de ordenação (Sorting Layer) e Ordem em Camada (Order in Layer) do SpriteRenderer para decidir quais partes de um jogo devem estar na frente das quais outras partes.

 

Nós simplesmente configuraremos a Ordem em Layer para -1 para que tudo o resto seja desenhado na frente dela:

background_order_in_layer.png

Nota: quanto maior for a ordem, mais fica em primeiro plano. Quanto menor a ordem, mais é em segundo plano.

 

O chão

Vamos também desenhar algum tipo de terreno para o chão. Vamos torná-lo muito largo para que haja espaço suficiente para nossos obstáculos mais tarde:

ground.png

Nota: clique com o botão direito do mouse na imagem, selecione Salvar como ... e salve-o na pasta Assets/ Sprites do projeto.

 

Selecionaremos o terreno na Área do Projeto e depois atribuiremos as mesmas Configurações de Importação que usamos antes:

ground_importsettings.png

 

Depois, vamos arrastá-lo da Área do Projeto para a Hierarquia novamente:

ground_to_hierarchy.png

Nota: desta vez, não vamos fazer uma criança da câmera.

 

Vejamos o inspetor e posicione o chão em X = 16 Y = -6 : de modo que esteja abaixo do plano de fundo e de modo que a maior parte da área esteja à direita da tela:

ground_position.png

 

Desta vez, selecionaremos um valor de Ordem em Camada de 1 , de modo que ele sempre estará na frente do pássaro e os obstáculos mais tarde:

ground_order_in_layer.png

 

Física do solo

O terreno deveria ser a parte do mundo da física. No momento, é realmente apenas uma imagem no mundo do jogo, apenas um efeito visual e nada mais. Queremos que o chão seja como uma parede com a qual o pássaro pode colidir, então vamos selecionar Adicionar Componente -> Física 2D -> Box Collider 2D no Inspetor :

ground_collider.png

 

Normalmente, seríamos feitos agora, mas há mais um ajuste a ser feito aqui. Mais tarde, vamos adicionar obstáculos ao nosso jogo (como os tubos verdes no jogo Flappy Bird original) , e esses obstáculos se moverão para cima e para baixo no chão. Os obstáculos e o terreno serão ambos parte do mundo da física, e de acordo com as leis da física, nunca podem haver dois objetos no mesmo lugar (ou no nosso caso, dois Collisionários) .

 

Existem várias maneiras de contornar isso. Como de costume, escolheremos a maneira mais fácil criando uma nova camada de física que usaremos para o solo e os obstáculos. Depois, diremos à Unity que simplesmente ignore colisões entre essa camada.

 

Podemos criar uma nova camada selecionando Adicionar camada no inspetor :

ground_add_layer.png

 

Depois, adicionaremos uma camada de usuário , vamos chamá-la WeirdPhysics :

layers_weirdphysics.png

 

Agora, podemos selecionar o terreno na Hierarquia novamente e depois atribuir a camada WeirdPhysics :

ground_layer_weirdphysics.png

 

Depois, selecionamos Editar -> Configurações do Projeto -> Física 2Dno menu superior e desativar as colisões WeirdPhysics vs. WeirdPhysics na Layer Collision Matrix :

physics_layer_ignore_weirdphysics.png

Nota: é muito raro que tenhamos que fazer isso na Unity, mas o nosso jogo Flappy Bird é uma dessas exceções.

 

Agora, o solo nunca colidirá com nenhum dos obstáculos.

 

Além disso, se pressionarmos Play, então podemos ver o céu e o chão já:

ground_inscene.png

 

O pássaro

A Imagem do Pássaro

Tudo bem, vamos até a parte mais importante do nosso jogo: o pássaro.Começaremos desenhando uma animação voadora de pássaros com 4 quadros:

bird.png

Nota: clique com o botão direito do mouse na imagem, selecione Salvar como ... e salve-o na pasta Assets/ Sprites do projeto.

 

Usaremos as seguintes Configurações de importação para ele:

bird_importsettings.png

 

Nossa imagem de pássaro contém várias imagens menores, portanto, é importante selecionar Multiple como Sprite Mode . Posteriormente, podemos clicar no botão Sprite Editor :

bird_spriteeditor_button.png

 

No Editor de Sprite nós o dividimos como uma grade de 16 x 16 :

bird_spriteeditor_settings.png

 

Depois de pressionar o botão Slice , podemos fechar o Sprite Editor. A Unity nos perguntará se queremos aplicar as Configurações de Importação Imediata , então vamos selecionar Aplicar .

 

Agora podemos ver nossas 4 fatias como crianças da imagem do pássarona Área do Projeto :

bird_children.png

 

A animação de pássaros

Vamos selecionar todas as fatias e arrastá-las para a Hierarquia :

bird_slices_to_hierarchy.png

 

Unity sabe que queremos criar uma animação a partir dessas fatias, e é por isso que nos pergunta onde salvar os arquivos de animação. Vamos criar uma nova pasta BirdAnimation e depois salvar a animação como fly.anim .

 

Depois, podemos ver dois novos arquivos em nossa pasta BirdAnimation :

bird_animation_files.png

 

O arquivo bird_0 é a máquina de estado que cuida de estados e velocidades de animação. O segundo arquivo é a própria animação da mosca . Vamos clicar duas vezes no arquivo bird_0 muito rápido para que possamos ver a máquina de estado da animação:

bird_animator.png

Nota: não precisamos nos preocupar com os estados de animação, porque só temos uma animação.

 

Vamos clicar no estado de voo e, em seguida, simplesmente diminuir a velocidade para 0,5 no Inspetor :

bird_animation_fly_speed.png

 

E como só temos uma animação, já estamos aqui. Se pressionarmos Play,então podemos ver isso em ação:

bird_animated.gif

 

Física dos pássaros

Nosso pássaro deve ser parte do mundo da física. Comecemos por dar-lhe um Collider, tal como fizemos com o chão. Vamos selecionar Adicionar Componente -> Física 2D -> Colisão de círculo 2D no Inspetor :

bird_collider.png

 

Agora, tudo no mundo da física que é suposto se mover também precisará de um Rigidbody . Um Rigidbody cuida de coisas como gravidade, velocidade e forças de movimento. Podemos adicionar um Rigidbody selecionando Adicionar Componente -> Física 2D -> Rigidbody 2D no Inspetor . Também habilitaremos a propriedade de ângulo fixo para que o pássaro não comece a girar de repente:

bird_rigidbody.png

 

Se pressionarmos Play , já podemos ver a propriedade de gravidade do Rigidbody em ação:

bird_gravity.gif

 

O Script do Movimento de Pássaros

Nosso pássaro já parece bastante decente, mas também deve voar para a direita em todos os momentos, e deve folhear as asas para voar para cima se o usuário pressionar um botão.

 

Esse tipo de comportamento pode ser implementado com um Script.Vamos selecionar Adicionar Componente -> Novo Script no Inspetor , nomeie Bird e selecione CSharp como o idioma. Também criaremos uma nova pasta de Scripts em nossa Área de Projeto para que possamos inserir o Bird Script nela:

bird_script_projectarea.png

 

Podemos clicar duas vezes no Script para abri-lo:

 


using UnityEngine ;
using System.Collections ;

public class Bird : MonoBehaviour {

// Use this for initialization
void Start ( ) {

}

// Update is called once per frame
void Update ( ) {

}
}
É necessário se cadastrar para acessar o conteúdo.

 

 

Nota: a velocidade é exatamente a direção do movimento multiplicada pela velocidade de movimento.

Se salvarmos o Script e pressione Reproduzir , podemos ver como o pássaro voa para a direita da tela.

 

Agora criamos uma nova variável de força e, em seguida, usamos nossa função de Atualização para verificar as pressões das teclas. Se o usuário pressionou a tecla Espaço então faremos o pássaro voar para cima com a força :

 


using UnityEngine ;
using System.Collections ;

public class Bird : MonoBehaviour {
// Movement speed
public float speed = 2 ;

// Flap force
public float force = 300 ;

// Use this for initialization
void Start ( ) {
// Fly towards the right
GetComponent < Rigidbody2D > ( ) . velocity = Vector2 . right * speed ;
}

// Update is called once per frame
void Update ( ) {
// Flap
if ( Input . GetKeyDown ( KeyCode . Space ) )
GetComponent < Rigidbody2D > ( ) . AddForce ( Vector2 . up * force ) ;
}
}

É necessário se cadastrar para acessar o conteúdo.

 

 

Nota: Application.LoadLevel pode ser usado para carregar uma cena.Application.loadedLevel é a cena atualmente carregada. Ou, em outras palavras, simplesmente reiniciamos a cena atual.

 

Follow Camera

Agora a câmera nunca se move. E como o pássaro sempre voa para a direita da tela, não poderemos vê-lo por muito tempo. Vamos resolver este problema criando um novo Script que faz a câmera seguir o pássaro o tempo todo.

 

Vamos selecionar a Câmera Principal na Hierarquia e, em seguida, clique em Adicionar Componente -> Novo Script , nomeie-a CameraFollow e selecione CSharp como o idioma. Também o transferiremos para a pasta Scripts e depois abri-lo:

 


using UnityEngine ;
using System.Collections ;

public class CameraFollow : MonoBehaviour {

// Use this for initialization
void Start ( ) {

}

// Update is called once per frame
void Update ( ) {

}
}
É necessário se cadastrar para acessar o conteúdo.

 

Vamos adicionar uma variável de Transformação pública para especificar qual alvo a seguir:

 


using UnityEngine ;
using System.Collections ;

public class CameraFollow : MonoBehaviour {
// The Target
public Transform target ;

// Update is called once per frame
void Update ( ) {

}
}
É necessário se cadastrar para acessar o conteúdo.

 

Nota: a posição X é a posição horizontal.

Agora o nosso script está pronto. No entanto, geralmente é considerada a melhor prática para fazer o movimento da câmera depois que tudo o resto na Cena foi atualizado. Nós simplesmente mudaremos nossa função de atualização para o LateUpdate , apenas para que ele seja perfeitamente liso:

 


void LateUpdate ( ) {
transform . position = new Vector3 ( target . position . x ,
transform . position . y ,
transform . position . z ) ;
}
É necessário se cadastrar para acessar o conteúdo.

 

Há muitas maneiras diferentes de fazer o obstáculo se mover para cima e para baixo o tempo todo. Como de costume, usaremos a maneira mais fácil.

 

Começaremos adicionando uma variável de velocidade e depois configurando a velocidade do Rigidbody para que os obstáculos se movam para cima com a velocidade :

 


using UnityEngine ;
using System.Collections ;

public class Obstacle : MonoBehaviour {
// Movement Speed (0 means don't move)
public float speed = 0 ;

// Use this for initialization
void Start ( ) {
// Initial Movement Direction
GetComponent < Rigidbody2D > ( ) . velocity = Vector2 . up * speed ;
}

// Update is called once per frame
void Update ( ) {

}
}
É necessário se cadastrar para acessar o conteúdo.

 

Nota: a função Switch simplesmente inverte a velocidade do Rigidbody. Em seguida, usamos InvokeRepeating para dizer à Unity que ligue para essa função a cada poucos segundos. Também adicionamos uma variável switchTime para especificar o tempo em que Switch deve ser chamado.

Salve o Script e configure a Velocidade do obstáculo para 1 :

obstacle_script_inspector.png

Nota: se não quisermos que um obstáculo se mova, podemos definir a velocidade para 0 ou desativar o Script.

 

Se pressionarmos Play , podemos ver nosso obstáculo subindo e descendo:

obstacle_moving.gif

 

Adicionando mais obstáculos

Vamos clicar com o botão direito do mouse no obstáculo na Hierarquia , selecionar Duplicar e movê-lo um pouco mais para a direita:

obstacle_duplicated.png

 

Também duplicaremos um e depois definiremos a propriedade Scale.Ycomo -1 :

obstacle_scale_y-1.png

 

Desta forma, ele parece corretamente ao posicioná-lo de cabeça para baixo:

obstacle_upsidedown.png

 

Podemos adicionar tantos obstáculos com tantas propriedades de velocidade e switchTime como queremos:

unity_flappy_bird.png

 

[spoiler=Fonte + Download do Projeto]

É necessário se cadastrar para acessar o conteúdo.

É necessário se cadastrar para acessar o conteúdo.

 

 

  • Curtir 1

qRXaV1L.png

Link para o comentário
https://www.webcheats.com.br/topic/2254653-tutorial-unity-2d-flappy-bird/
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.