Beruflich Dokumente
Kultur Dokumente
Introdução
Criação do Jogo
Criar um novo jogo do tipo 2D (Setup defaults for:) com nome Asteroides2D.
Não precisa selecionar nenhum pacote.
Área da Tela
No painel Game, logo abaixo, clique em Free Aspect e selecione 5:4, para que nosso jogo
seja mostrado em uma área menor.
Salvar a Cena
Clique em qualquer lugar da cena
Tecle Ctrl+S
Dê o nome fase1 e salve na pasta Scenes
Importar as Texturas
Descompacte o arquivo zip baixado
Abra a pasta Textures
Clique com o botão direito – Import New Asset...
Vá até a pasta das imagens baixadas
Selecione todas as imagens, exceto particle e as importe
Drag and Drop
Também podemos selecionar as imagens pelo Windows Explorer, arrastar e soltar na pasta
Textures do Unity.
Renomear as imagens
background – Fundo
bullet – Bala
enemy – Asteroide
spaceship – Nave
spawn - Clonador
Adicionar o Fundo/Background
Arraste a textura Fundo para a hierarquia. Podemos arrastar e soltar manualmente na cena,
mas assim precisariamos ajustar manualmente sua posição. A vantagem de soltar na
hierarquia é que o background fica centralizado. No caso do fundo já fica na posição
adequada. Clique na Main Camera e veja que o fundo ocupa quase a mesma região da Main
Camera, ou seja, quase inteiramente o fundo aparecerá para o jogador.
using UnityEngine;
using System.Collections;
public GameObject bala; // A ser preenchido via Inspector com o prefab bala
public int speed = 10;
void Update() {
// Move a nave horizontalmente com setas ou com as teclas A e D
// Eixo X – na horizontal
float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
transform.Translate(horizontal, 0, 0);// Aplicando as mudanças
Observe no Inspector que que a variável Bala precisa ser preenchida. Vamos criar a bala.
Execute o jogo
Clique no botão Play e mova a nave com as setas para a esquerda e para a direita. Observe
que a nave pode sair da tela para os dois lados. Mais à frente resolveremos isso.
using UnityEngine;
using System.Collections;
Abra a pasta Prefabs, arraste o prefab Bala e solte na caixa Bala, sobre None (Game Object),
para que fique assim:
Execute o Jogo
E aperte na barra de espaços para atirar e mova a nave.
using UnityEngine;
using System.Collections;
// Destroi o asteroide após 3 segundos, que ele não está mais visível na tela
Destroy(gameObject, 3);
}
}
Executar o Jogo
Vamos melhorar isso, após adicionar o clonador.
Adicionar o Clonador
Este objeto tem o objetivo de clonar o Asteroide fazendo nascer alguns em posições
aleatórias.
using UnityEngine;
using System.Collections;
// Variável para conhecer quão rápido nós devemos criar novos Asteroides
public float spawnTime = 2;
void Start() {
// Chamar a função 'addEnemy' a cada 'spawnTime' segundos
InvokeRepeating("addEnemy", spawnTime, spawnTime);
}
Executar o Jogo
Teste e veja como está. Agora os asteroides caem de posições aleatórias.
using UnityEngine;
using System.Collections;
public GameObject bala; // A ser preenchido via Inspector com o prefab bala
public int speed = 10;
private int vidas = 3;
public GUIText vidasGui; // Arrastar vidas da hierarquia para esta variavel
void Update() {
//Move a spaceship horizontalmente. Move esquerda e direita com setas ou A e D
float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime; // Eixo - X
transform.Translate(horizontal, 0, 0);// Aplicando as mudanças
Experimente
Veja se aparece a quantidade de vidas.
Bala
Import os dois arquivos de audio para a pasta Audio
Este som é implementado apenas com a IDE do Unity
Selecione o prefab Bala
Component – Audio – Audio Source
Rolar o Inspector para que mostre o Audio Clip
Arraste o áudio audioBala para o Audio Clip.
Deixando assim:
using UnityEngine;
using System.Collections;
public GameObject bala; // A ser preenchido via Inspector com o prefab bala
public int speed = 10;
private int vidas = 3;
public GUIText vidasGui; // Arrastar vidas da hierarquia para esta variavel
public AudioClip audioNaveColisao; // Arrastar o audio laser para esta variavel
void Update() {
// Move a spaceship horizontalmente - Move esquerda e direita com setas ou A e D
float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime; // Eixo - X
transform.Translate(horizontal, 0, 0);// Aplicando as mudanças
Adicionar dois objetos GUI Text, um para Pontos e outro para Recorde.
using UnityEngine;
using System.Collections;
// Este script foi anexado a um objeto GameObject Empty arrastado para dentro da Main
Camera
// Este script precisa ficar anexado a um objeto que esteja o tempo todo valendo, como a main
camera ou o background
public class pontosScript : MonoBehaviour {
void Update () {
if(pontos > PlayerPrefs.GetInt("Recorde")){
PlayerPrefs.SetInt("Recorde", pontos);
}
pontosGui.fontStyle = FontStyle.Bold;
recordeGui.fontStyle = FontStyle.Bold;
pontosGui.fontSize = 18;
recordeGui.fontSize = 18;
pontosGui.text = "Pontos " + pontos;
recordeGui.text = "Recorde: " + PlayerPrefs.GetInt("Recorde");
}
}
Anexar este script ao objeto Pontuacao.
Cadastrar as Variáveis Pontos Gui e Recorde Gui no Inspector para o objeto Pontuacao.
Arrastar Pontos da Hierarquia para a variável em Pontuacao
Arrastar Recorde da Hierarquia para Pontuacao.
Edite asteroideScript
using UnityEngine;
using System.Collections;
// Faz o asteroide rodar sobre si mesmo aleatoriamentre entre -200 e 200 graus
rigidbody2D.angularVelocity = Random.Range(-200, 200);
// Destroi o asteroide em 3 segundos, quando ele não está mais visível na tela
Destroy(gameObject, 3);
}
Aprontando o Gatilho
Os objetos Nave, Bala e Asteroide precisam ter a propriedade Is Trigger ativada no seu
componente Box Collider 2D.
Para que o jogador escolha sua opção com o mouse ou tecle ESC para sair do jogo.
using UnityEngine;
using System.Collections;
// Importar uma imagem para o background bg_menu, onde ficara o botão
// E associar este script ao objeto Fundo
public class menuScript : MonoBehaviour{
void Update() {
// Teclando ESC saira do Jogo, mas somente no executavel e nao dentro do
editor
if (Input.GetKey ("escape")) {
Application.Quit();
}
}
void OnGUI(){
const int buttonWidth = 120;
const int buttonHeight = 30;
Execute
Agora podemos testar nosso joguinho, que já conta com vários e bons recursos.
Caso tenha problemas ao executar a nova fase menu, não aparecendo nada na tela.
Experimente clicar na pasta Assets com botão direito – Sync MonoDevelop Project
using UnityEngine;
using System.Collections;
public GameObject bala; // A ser preenchido via Inspector com o prefab bala
public int speed = 10;
private int vidas = 3;
public GUIText vidasGui; // Arrastar vidas da hierarquia para esta variavel
public AudioClip audioNaveColisao; // Arrastar o audio laser para esta variavel
void Update() {
// Move a spaceship horizontalmente - Move esquerda e direita com setas ou A e D
float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime; // Eixo - X
transform.Translate(horizontal, 0, 0);// Aplicando as mudanças
Experimente
Agora, ao mover a nave ela esbarrará nos extremos esquerdo e direito, mantendo-se na tela.
Clique em Build