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