¿Qué golpeé?
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 9 de 71.
La Collision que Unity pasa a OnCollisionEnter describe el otro lado del contacto. collision.gameObject es el objeto contra el que chocaste, así que collision.gameObject.name es su nombre, y collision.gameObject.CompareTag("Hazard") pregunta por su etiqueta. (collision.collider es el collider exacto que tocaste, cuando un objeto tiene varios.)
Este coche de choque registra todo aquello contra lo que choca y se queja de los peligros:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Bumped into " + collision.gameObject.name);
if (collision.gameObject.CompareTag("Hazard"))
{
Debug.Log("Ouch!");
}
}La primera línea que registra es Bumped into Floor, en el momento en que empieza el juego: el suelo sobre el que está también cuenta como una colisión. Por eso, un script que reacciona a los impactos siempre pregunta primero contra qué chocó. Fíjate en qué objeto nombras: CompareTag("Hazard") por sí solo pregunta por tu propio objeto, y Destroy(gameObject) destruye tu propio objeto, mientras que Destroy(collision.gameObject) elimina el objeto contra el que chocaste.
Desafío
FácilDale una tarea al quitanieves: despejar los bloques etiquetados como Snow.
- Añade
void OnCollisionEnter(Collision collision)aPlow, para que actúe solo cuandocollision.gameObject.CompareTag("Snow"). - Dentro, ejecuta
Destroy(collision.gameObject);, suma 1 a un campoclearedy registra"Cleared " + cleared.
Pulsa «Jugar» y conduce hacia la nieve: cada bloque desaparece y la Consola lo cuenta. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class Plow : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
private int cleared;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
}
// Nieve con la que choca la quitanieves: destrúyela, cuéntala y registra la cantidad
}
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity