Menu
CoddyTech

Romper

Lección 6 de 16 del curso Juego en Unity: Rompebloques de Coddy.

Los ladrillos no tienen Rigidbody, pero la pelota sí, y Unity envía OnCollisionEnter a ambos objetos en una colisión. Así que un ladrillo puede detectar el impacto por sí mismo. En el script del ladrillo, gameObject es el ladrillo y collision.gameObject es lo que lo golpeó.

La puntuación pertenece a GameManager, y los ladrillos son copias de un prefab. Un prefab es un recurso fuera de la escena, así que sus campos no pueden apuntar al GameManager de la escena en el Inspector. GameManager establece el GameManager.Instance estático como referencia a sí mismo en Awake(), así que cualquier script puede acceder a él, incluso las copias del prefab.

Un jarrón que se rompe cuando el jugador choca con él:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player")) Shatter();
}

public void Shatter()
{
    Destroy(gameObject);
}

Destroy(gameObject) elimina el jarrón. Destroy(collision.gameObject) eliminaría al jugador, y Destroy(this) elimina solo el script, dejando el jarrón en pie. Mantener la rotura en su propio método público significa que otro código, como una bomba o una mejora, también puede romper el jarrón.

challenge icon

Desafío

Intermedio
  1. En GameManager, agrega un int score y public void BrickBroken(Brick brick), que suma los points del ladrillo a score.
  2. En Brick, escribe public void Hit(): le indica a GameManager.Instance que este ladrillo se rompió y luego lo destruye.
  3. Agrega OnCollisionEnter a Brick: cuando el objeto etiquetado como Ball lo golpee, llama a Hit().

Presiona Play, rompe algunos ladrillos y después haz clic en Check.

Pruébalo tú mismo

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    // A continuación: la pelota rompe un ladrillo y obtiene sus puntos.
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego en Unity: Rompebloques