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.
Desafío
Intermedio- En
GameManager, agrega unint scoreypublic void BrickBroken(Brick brick), que suma lospointsdel ladrillo ascore. - En
Brick, escribepublic void Hit(): le indica aGameManager.Instanceque este ladrillo se rompió y luego lo destruye. - Agrega
OnCollisionEnteraBrick: cuando el objeto etiquetado comoBalllo golpee, llama aHit().
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.
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.