Menu
CoddyTech

Romper

Lección 6 de 19 del curso Juego en Unity: Rompe ladrillos 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

La pelota rompe ladrillos y suma sus puntos.

  1. En GameManager, añade int score; y public void BrickBroken(Brick brick), que suma brick.points a la puntuación.
  2. En Brick, escribe public void Hit(): GameManager.Instance.BrickBroken(this);, después Destroy(gameObject);
  3. En OnCollisionEnter de Brick, llama a Hit() cuando el objeto tenga la etiqueta Ball.

Pulsa «Jugar» y lanza la pelota: cada ladrillo que golpea la pelota desaparece. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

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

    // A continuación: la pelota rompe un ladrillo y suma sus puntos.
}

Todas las lecciones de Juego en Unity: Rompe ladrillos

Practica por tu cuenta: Playground de Unity