Quebrar
Lição 6 de 16 do curso Jogo no 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édio- Em
GameManager, adicione umint scoreepublic void BrickBroken(Brick brick), que adiciona ospointsdo tijolo ascore. - Em
Brick, escrevapublic void Hit(): ele informa aGameManager.Instanceque este tijolo quebrou e, em seguida, destrói o tijolo. - Adicione
OnCollisionEnteraBrick: quando o objeto marcado com a tagBallo atingir, chameHit().
Pressione Play, quebre alguns tijolos e, em seguida, clique em Check.
Experimente você mesmo
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// Próximo passo: a bola quebra um bloco e ganha os pontos dele.
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.