Download sharebear

Transcrição

Download sharebear
Criando um Flappy Bird no Unity3D
Original in English
Este tutorial é uma tradução simplificada do tutorial abaixo publicado em inglês:
http://anwell.me/artic les/unity3d-flappy-bird/
Publicado aqui com a generosa autorização do seu autor, Anwell Wang.
Criar um jogo com o Unity3D do tipo Flappy Bird usando os recursos 2D do Unity.
Vídeo: http://zippy.gfycat.com/BossyUnselfishBluebottle.webm
As imagens que utilizei foram as mesmas do tutorial acima. O próprio tutorial oferece as imagens
para download ou então podemos baixar o projeto completo do GitHub e retirar dele as imagens.
Crie um novo projeto
Crie um novo projeto do tipo 2D chamado MeuFlappyBird.
Vídeo:
http://zippy.gfycat.com/LastReadyAnnashummingbird.webm
Crie Pastas
Selecione a pasta Assets e crie novas pastas: Prefabs, Scenes, Scripts e Textures
Após criar a primeira pode duplicar e renomear para agilizar.
Vídeo
http://zippy.gfycat.com/FatDamagedKatydid.webm
Importando as imagens
Abra apasta Textures e importe para ela as imagens que usaremos: background, player e os dois
obstáculos.
Adicione o Background
Abra apasta Textures e arraste o background para a cena e, no Inspector, mude o Scale x e y para
2.5. Mude x e y das posições para 0 e 0.
Salvando a Cena
Tecle Ctrl+S e selecione a pasta Scenes e entre com o nome fase1 para a cena.
Adicionar o Player
Arraste o player para a cena, mais ou menos numa posição onde ficará (veja imagens no tutorial
original, um quarto de x e ao meio de y).
Vídeo:
http://zippy.gfycat.com/LittleSoulfulDouglasfirbarkbeetle.webm
Com o player selecionado adicione um componente tipo física 2D, RigidBody 2D.
Teste o jogo pressioando o botão Play. Veja que o player cairá, por conta da gravidade adicionada
pelo RigidBody. Caso queira verificar remova o RigidBody e teste novamente.
Vídeo:
http://zippy.gfycat.com/OnlyLividDassie.webm
Vídeo:
http://zippy.gfycat.com/GiantWateryAfricanfisheagle.webm
Criar Script para controlar o Player
Abra a pasta scripts e crie um novo script C# com nome Player.
Selecione o nome do script e tecle enter para abrir o Mono e entre com o contendo:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
// The force which is added when the player jumps
// This can be changed in the Inspector window
public Vector2 jumpForce = new Vector2(0, 300);
// Update is called once per frame
void Update ()
{
// Jump
if (Input.GetKeyUp("space"))
{
rigidbody2D.velocity = Vector2.zero;
rigidbody2D.AddForce(jumpForce);
}
}
}
Vector2(float x, float y);// ponto
Vector2.Distance(a,b) – retorna a distância entre a e b
Este script controlará o player através da barra de espaços.
Como a variável jumpForce é public poderemos alterar seu valor através do Inspector.
Voltando à interface gráfica do Unity, selecione o objeto player na hierarquia.
Arraste o script Player da pasta Scripts para o Inspector, para que o script fique associado ao player.
Outra forma é selecionar o player na hierarquia, clicar no Inspector em Add Component – Scripts –
Player.
Teste novamente
Execute novamente para testar o uso da barra de espaços.
Adicionar Obstáculos
Abra a pasta Textures e arraste os dois obstáculos (rock e rockDown) para a cena. Deixe-os um
sobre o outro, como no tutorial original, do lado direito da cena, já saindo, numa posição que o
player passe pela abertura entre ambos. Selecione cada um e altere o valor de sua Scale para 2.5.
Vídeo
http://zippy.gfycat.com/MeekImpishArcticduck.webm
Vídeo
http://zippy.gfycat.com/PowerfulFemaleBengaltiger.webm
Criar um GameObject Vazio
GameObject – Create Empty
Renomear para RockPair
Arraste rock e rockDown para o objeto RockPair
Adicione o Componente RigidBody2D ao RockPair e marque Is Kinematic.
Criar Script para mover os Obstáculos
Abra a pasta Scripts e crie o novo script Obstacle contendo:
using UnityEngine;
using System.Collections;
public class Obstacle : MonoBehaviour {
public Vector2 velocity = new Vector2(-4, 0);
// Use this for initialization
void Start () {
rigidbody2D.velocity = velocity;
}
// Update is called once per frame
void Update () {
}
}
Adicionar este script ao objeto RockPair.
Testar novamente
Agora podemos ver os obstáculos se movendo.
Gerando novos Obstáculos
Precisamos criar mais obstáculos e não somente estes dois.
Vídeo
http://zippy.gfycat.com/CreepyFrayedDragonfly.webm
Criar o prefab RockPair
Abra a pasta Prefabs
Arraste o objeto RockPair para a pasta Prefabs para criar um prefab RockPair.
Um prefab é um objeto que pode ser criado e destruido várias vezes.
Delete o objeto RockPair da hierarquia.
Vídeo
http://zippy.gfycat.com/TartSmoothAlaskajingle.webm
Criar novo GameObject Scripts
Cria um novo GameObject Vazio e renomeie para Scripts.
Criar novo script Generate
Contendo:
using UnityEngine;
using System.Collections;
public class Generate : MonoBehaviour {
public GameObject rocks;
// Use this for initialization
void Start () {
InvokeRepeating("CreateObstacle", 1f, 1.5f);
}
void CreateObstacle()
{
Instantiate(rocks);
}
// Update is called once per frame
void Update () {
}
}
Adicione o script Generate ao objeto Scripts.
Mantenha o objeto Scripts selecionado na hierarquia.
Abra a pasta Prefabs.
Clique no prefab RockPair, arraste e solte sobre o campo da variável Rocks no Inspector.
Teste novamente
Agora verá os objstáculos sendo gerados a cada 1.5 segundos.
Matando o Player
Clique no objeto Player na hierarquia.
Adicione um componente Box Collider 2D
Vá para o prefab RockPair, clique na setinha e então selecione o primeiro objeto.
Adicione o componente Polygon Collider 2D.
De forma semelhante adicione o mesmo componente ao segundo objeto do prefab.
Vídeo
http://zippy.gfycat.com/NeighboringHeavenlyKodiakbear.webm
Reiniciar o Jogo em Colisões
Edite o script Player para que fique assim:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
// The force which is added when the player jumps
// This can be changed in the Inspector window
public Vector2 jumpForce = new Vector2(0, 300);
// Update is called once per frame
void Update ()
{
// Jump
if (Input.GetKeyUp("space"))
{
rigidbody2D.velocity = Vector2.zero;
rigidbody2D.AddForce(jumpForce);
}
// Die by being off screen - Se sair da tela morre
Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
if (screenPosition.y > Screen.height || screenPosition.y < 0)
{
Die();
}
}
// Die by collision
void OnCollisionEnter2D(Collision2D other)
{
Die();
}
void Die()
{
Application.LoadLevel(Application.loadedLevel);
}
}
Adicionar Aleatoriedade
Alterar o script Obstacle para que fique assim:
using UnityEngine;
using System.Collections;
public class Obstacle : MonoBehaviour
{
public Vector2 velocity = new Vector2(-4, 0);
public float range = 4;
// Use this for initialization
void Start()
{
rigidbody2D.velocity = velocity;
transform.position = new Vector3(transform.position.x, transform.position.y - range
* Random.value, transform.position.z);
}
}
Testar novamente
Veja que agora os obstáculos aparecem em alturas diferentes e aleatóriamente em uma faixa.
Para varias a faixa selecione o prefab RockPair e altere a variável Range.
Mostrando e Guardando o Score
Altere o script Generate para isso:
using UnityEngine;
using System.Collections;
public class Generate : MonoBehaviour
{
public GameObject rocks;
int score = 0;
// a visibilidade private é a default para variáveis, quando não especificada é assumida
// Use this for initialization
void Start()
{
InvokeRepeating("CreateObstacle", 1f, 1.5f);
}
// Update is called once per frame
void OnGUI ()
{
GUI.color = Color.black;
GUILayout.Label(" Score: " + score.ToString());
}
void CreateObstacle()
{
Instantiate(rocks);
score++;
}
}
Download dos fontes do jogo original:
https://github.com/anwell/TappyPlane