Menu
CoddyTech

¿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.

challenge icon

Desafío

Fácil

Dale una tarea al quitanieves: despejar los bloques etiquetados como Snow.

  1. Añade void OnCollisionEnter(Collision collision) a Plow, para que actúe solo cuando collision.gameObject.CompareTag("Snow").
  2. Dentro, ejecuta Destroy(collision.gameObject);, suma 1 a un campo cleared y 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

Practica por tu cuenta: Playground de Unity