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.
Desafío
IntermedioLa pelota rompe ladrillos y suma sus puntos.
- En
GameManager, añadeint score;ypublic void BrickBroken(Brick brick), que sumabrick.pointsa la puntuación. - En
Brick, escribepublic void Hit():GameManager.Instance.BrickBroken(this);, despuésDestroy(gameObject); - En
OnCollisionEnterde Brick, llama aHit()cuando el objeto tenga la etiquetaBall.
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