Quebrar
Lição 6 de 19 do curso Jogo Unity: Quebra-Tijolos da Coddy.
Os tijolos não têm Rigidbody, mas a bola tem, e o Unity envia OnCollisionEnter para ambos os objetos em uma colisão. Então, um tijolo pode perceber o impacto por conta própria. No script do tijolo, gameObject é o tijolo e collision.gameObject é aquilo que o atingiu.
A pontuação pertence ao GameManager, e os tijolos são cópias de um prefab. Um prefab é um recurso fora da cena, então seus campos não podem apontar para o GameManager da cena no Inspector. O GameManager define o GameManager.Instance estático como ele mesmo em Awake(), então qualquer script pode acessá-lo, inclusive as cópias do prefab.
Um vaso que se quebra quando o jogador esbarra nele:
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player")) Shatter();
}
public void Shatter()
{
Destroy(gameObject);
}Destroy(gameObject) remove o vaso. Destroy(collision.gameObject) removeria o jogador, e Destroy(this) remove apenas o script, deixando o vaso de pé. Manter a quebra em seu próprio método público permite que outros códigos, como uma bomba ou um bônus, também quebrem o vaso.
Desafio
MédioA bola quebra os tijolos e soma os pontos deles.
- Em
GameManager, adicioneint score;epublic void BrickBroken(Brick brick), que somabrick.pointsà pontuação. - Em
Brick, escrevapublic void Hit():GameManager.Instance.BrickBroken(this);, depoisDestroy(gameObject); - Em
OnCollisionEnterde Brick, chameHit()quando o objeto estiver marcado comoBall.
Pressione “Jogar” e lance a bola: cada tijolo atingido por ela desaparece. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// A seguir: a bola quebra um bloco e marca os pontos dele.
}
Todas as lições de Jogo Unity: Quebra-Tijolos
Pratique por conta própria: Playground de Unity