O chuva game é um dos mais básicos jogos para se desenvolver na Unity,
nesse tutorial vamos aprender a fazê-lo. E aprenderemos sobre uma característica
muito importante da Unity, os colisores.
Vamos selecionar a câmera principal na hierarquia e, em seguida,
definir a cor de fundo para preto.
Também ajustaremos o tamanho (para 5) e a posição (X e Y para 0), como mostra a imagem a seguir:
Nesse jogo, nosso herói é um balde, e seu objetivo é pegar o máximo de gotas.
Nota: Clique com o botão direito na imagem, selecione Salvar como ... , navegue até a pasta Assets
do projeto e salve-a.
Salve o arquivo do balde dentro da pasta do projeto.
Clique no arquivo “bucket”, para abrir sua Configuração de importação, e mude
o valor “Pixel per Unity” para 50.
Novamente dentro da Unity, vamos arrastar a imagem do balde, da aba
Projeto para dentro da cena, criando assim o GameObject do balde.
Na aba Hierarquia, vamos mudar o nome do objeto para “Balde” e
mudar sua posição X e Y para 0 e -4, respectivamente.
Nós precisamos que o balde faça parte da física do jogo, para isso, vamos
adicionar nele um corpo, dentro do inspetor do balde, clique em “Adicionar componente”, e
adicione um Rigidbody2D, uma vez adicionado, clicamos em “Constantes”, e
marcamos a caixa “Freeze position” na caixa “Y” e marcamos “Freeze Rotation” e
marcamos a caixa “Z”, com isso, nosso balde não pode se mover na vertical nem rotacionar.
Agora, precisamos fazer o balde colidir, vamos novamente adicionar um novo componente,
chamado “Box Collider 2D” e mudaremos os valores de X e Y no “Offset” e “Size”, deixando desse jeito:
Não é muito útil um balde que não se move, por isso, vamos adicionar um script de movimentação.
Vamos clicar em Adicionar componente - > Novo Script e vamos dar o nome de
MovimentacaoHorizontal.
Clique duas vezes para abrir o editor de script e coloque o seguinte código.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovimentacaoHorizontal : MonoBehaviour {
public float speed = 0.4f;
Vector2 dest = Vector2.zero;
// Use this for initialization
void Start () {
dest = transform.position;
}
// Update is called once per frame
void FixedUpdate () {
Vector2 p = Vector2.MoveTowards(transform.position,dest,speed);
GetComponent<Rigidbody2D>().MovePosition(p);
if(Input.GetKey(KeyCode.RightArrow) && valid(Vector2.right)){
dest = (Vector2)transform.position + Vector2.right;
}
if(Input.GetKey(KeyCode.LeftArrow) && valid(-Vector2.right)){
dest = (Vector2)transform.position - Vector2.right;
}
}
bool valid(Vector2 dir){
Vector2 pos = transform.position;
RaycastHit2D hit = Physics2D.Linecast(pos + dir,pos);
return (hit.collider == GetComponent<Collider2D>());
}
}
A função “valid” válida o local para onde o balde está indo, e a função Vector2.MoveTowards
move o balde em si.
Agora o balde consegue se mover de um lado para outro, mas ele está sumindo
da tela quando vai muito para um lado ou para outro na tela.
Para evitar isso, vamos colocar colisores que servirão como “paredes”.
Na aba de hierarquia vamos clicar em “Create Empty” para criar um objeto vazio,
objetos vazio são objeto invisíveis para o jogador, mas podem receber
componentes como qualquer outro objeto.
Vamos mudar o nome desse objeto para “Borda1”, e aplicar a ele um Box Collider 2D.
E vamos ajustar seu tamanho de forma que ele vire uma “parede” para o cenário,
mudando o “size” dentro do Box Collider, alterando os valores de X e Y para 0.2 e 10,
respectivamente, e depois mudando o valor position para -7, dentro do Transform.
Agora, usando os mesmos passos da “Borda1”, iremos criar a “Borda2”,
modificando somente a posição, altere o valor de X para 7, como a imagem a seguir:
Não é um jogo de chuva sem chuva, agora, vamos fazer as gotas caírem do céu.
Vamos interpretar cada gota como um objeto em jogo. Porém diferente dos outros
objetos que criamos, precisamos de uma quantidade indeterminada de gotas,
em posições diferentes. por isso, precisamos que nosso jogo crie essas gotas para nós automaticamente.
Vamos criar um objeto invisível para servir de base para a criação das gotas. Vamos chamá-lo de “Nuvem”.
Agora vamos colocar o script da criação de gotas nesse objeto.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Nuvem : MonoBehaviour {
// Use this for initialization
public GameObject gota;
public bool podeCair;
void Start () {
podeCair = true;
}
// Update is called once per frame
void Update () {
if(podeCair){
CairGota();
}
}
public void CairGota(){
Vector3 position = new Vector3(Random.Range(-6.0f, 6.0f), 4.9f, 0);
Instantiate(gota,position,Quaternion.identity);
podeCair = false;
StartCoroutine(tempoDeTiro());
}
IEnumerator tempoDeTiro(){
yield return new WaitForSeconds(1f);
podeCair = true;
}
}
O script da nuvem basicamente faz aparecer um objeto numa posição aleatória em
relação ao eixo X, porém fixa no eixo Y, esse é o trabalho da função Instantiate.
O objeto instanciado pela função Instantiate é definido por nós, dentro da Unity
Uma vez colocado o script da Nuvem vamos atribuir o prefab “Gota”.
Faça download dessa imagem e salve na pasta do projeto com o nome de “droplet”
Agora, baixe o prefab da gota, no link abaixo, e salve como “Gota”.
Agora, dentro da Unity, abra o prefab, dentro da aba project para acessar seu Inspector,
e arraste a imagem “droplet” no Sprite renderer.
Um prefab nada mais é do que um objeto do jogo, porém no formado de um arquivo,
exportado de um projeto, e pronto para ser importado em outros projetos.
O projeto da gota tem todos os componentes necessários para funcionar, e está, inclusive,
ligada ao seu script, porém, ainda precisamos de um arquivo com esse script.
Nesse caso, apenas coloque o arquivo a seguir na pasta do projeto.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Gota : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter2D(Collider2D col)
{
Debug.Log("GameObject1 collided with " + col.name);
Destroy(gameObject);
if(col.name.Equals("Balde")){
Contador.pontos++;
Som.colisao = true;
}
}
}
Agora, arraste o arquivo de script da gota para dentro do Inspector do prefab.
Esse código testa se a gota colidiu com o balde, mas não tente executar seu jogo agora,
pois ainda falta algo importante.
Vai ser difícil lembrar de quantas gotas você pegou enquanto joga, por isso,
vamos criar um placar, para registrar as gotas pegas.
Vamo clicar com o botão direito dentro do menu Hierarquia, vamos em UI > Text
Quando criamos um Text, ele cria também um Canvas, dentro da Unity, um canvas é
como um quadro em branco, onde nós podemos colocar vários objetos. O text é um texto simples.
Dentro do menu Hierarquia, coloque o canvas dentro da Main Camera, e abre o Inspector do canvas.
Dentro do Inspector do Canvas, no componente Canvas, altere o Render Mode
para Screen space - Camera, e no campo Render Camera arraste a Main Camera.
Agora vamos ao texto, dentro do inspector do texto, altere o valor Font Size para 30,
e então, crie o seguinte script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Contador : MonoBehaviour {
// Use this for initialization
public Text placar;
public static int pontos;
void Start () {
pontos = 0;
}
// Update is called once per frame
void Update () {
placar.text = "Pontos: " + pontos.ToString();
}
}
Esse script tem um valor static int pontos que pode ser acessado por todos os scripts do códigos,
e com isso o valor de pontos pode ser alterado por outro script. E dentro da função update,
ele altera o texto de um objeto Text para o placar atual.
Dentro do Inspector do text, arraste o próprio objeto text do menu Hierarquia para dentro do script Placar.
(Imagem disso ai que eu descrevi acima)
Para tornar mais agradável o jogo, vamos colocar um relaxante som de gota.
Primeiro baixe o arquivo abaixo e salve na pasta do projeto com o nome “drop”.
Agora, dentro da Unity, crie dentro do menu Hierarquia, um Audio > Audio Source e
coloque o nome “Som_gota”, dentro de seu Inspector, coloque na caixa Audio Clip o
arquivo de som “drop” e mude a posição Y do Audio Source para 7 e crie para ele
um script chamado “Som”.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Som : MonoBehaviour {
public AudioSource gota;
public static bool colisao;
// Use this for initialization
void Start () {
colisao = false;
}
// Update is called once per frame
void Update () {
if(colisao){
gota.volume = 0.5f;
gota.loop = false;
gota.Play();
colisao = false;
}
}
}
Esse script testa quando a gota toca no balde para tocar o som atribuído.
Arraste o Audio Source para a caixa dentro do script no Inspector.
Agora execute o seu jogo.
Utilizando os conceitos aprendidos neste tutorial, coloque a seguinte imagem de fundo:
Agora, arraste o arquivo de script da gota para dentro do Inspector do prefab.
Esse código testa se a gota colidiu com o balde, mas não tente executar seu jogo agora, pois ainda falta algo importante.
Pontos
Vai ser difícil lembrar de quantas gotas você pegou enquanto joga, por isso, vamos criar um placar, para registrar as gotas pegas.
Vamo clicar com o botão direito dentro do menu Hierarquia, vamos em UI > Text
(Imagem clicando com o botão do mouse)
Quando criamos um Text, ele cria também um Canvas, dentro da Unity, um canvas é como um quadro em branco, onde nós podemos colocar vários objetos. O text é um texto simples.
Dentro do menu Hierarquia, coloque o canvas dentro da Main Camera, e abre o Inspector do canvas.
(Imagem do canvas dentro da camera e do inspector dele)
Dentro do Inspector do Canvas, no componente Canvas, altere o Render Mode para Screen space - Camera, e no campo Render Camera arraste a Main Camera.
(Inspector do canvas com a camera)
Agora vamos ao texto, dentro do inspector do texto, altere o valor Font Size para 30, e então, crie o seguinte script:
[Arquivo de texto]
Esse script tem um valor static int pontos que pode ser acessado por todos os scripts do códigos, e com isso o valor de pontos pode ser alterado por outro script. E dentro da função update, ele altera o texto de um objeto Text para o placar atual.
Dentro do Inspector do text, arraste o próprio objeto text do menu Hierarquia para dentro do script Placar.
(Imagem disso ai que eu descrevi acima)
Som
Para tornar mais agradável o jogo, vamos colocar um relaxante som de gota.
Primeiro baixe o arquivo abaixo e salve na pasta do projeto com o nome “drop”.
(Imagem do drop na pasta do projeto)
Agora, dentro da Unity, crie dentro do menu Hierarquia, um Audio > Audio Source e coloque o nome “Som_gota”, dentro de seu Inspector, coloque na caixa Audio Clip o arquivo de som “drop” e mude a posição Y do Audio Source para 7 e crie para ele um script chamado “Som”.
(Imagem com o Inspector do som)
[Arquivo do script som]
Esse script testa quando a gota toca no balde para tocar o som atribuído. Arraste o Audio Source para a caixa dentro do script no Inspector.
Agora execute o seu jogo.
Desafio
Utilizando os conceitos aprendidos neste tutorial, coloque a seguinte imagem de fundo:
(Imagem usada de fundo)
[Arquivo do projeto]
0 Comentários