3. Colisiones y Triggers: Interacción Física en el Juego 💥🪙
Diferencia Crucial: Collider vs. Trigger
Para que dos objetos interactúen físicamente en Unity, ambos deben poseer un componente derivado de Collider (Box Collider, Sphere Collider, Capsule Collider, etc.). Existen dos formas de configurar estos colisionadores:
- Collider Sólido (Is Trigger desactivado): Actúa como un muro impenetrable. Cuando el jugador choca contra él, rebota física y automáticamente debido a la masa y fuerzas calculadas en el Rigidbody.
- Trigger (Is Trigger activado): Funciona como una zona de detección o sensor invisible. El jugador puede atravesarlo libremente sin sentir resistencia, pero el motor de Unity nos avisará mediante código cuando el jugador entre, permanezca o salga de esa zona. Es ideal para coleccionables, llaves, portales de meta o trampas de lava.
1. Animando las Monedas (Rotación Continua)
Para que nuestras monedas parezcan vivas y atraigan la atención del jugador, haremos que roten continuamente en el espacio.
- Crea un script llamado
RotateCoinen tu carpeta de activos. - Reemplaza su código por el siguiente:
- Arrastra este script sobre tu objeto Coin.
- En el Inspector del objeto Coin, asegúrate de activar la casilla Is Trigger en su componente Box Collider o Sphere Collider.
- Asigna el Tag "Coin" al objeto en la parte superior del Inspector (si no existe, haz clic en Add Tag para crearlo).
2. Programando la Recolección (Triggers)
Abriremos nuestro script PlayerController.cs y agregaremos el método nativo OnTriggerEnter de Unity para detectar cuándo el jugador pasa por encima de la moneda:
¿Cómo funciona? Cuando la esfera del jugador entra en la zona del colisionador de la moneda, Unity invoca automáticamente a OnTriggerEnter y nos pasa los datos de ese colisionador (other). Si el tag del objeto es "Coin", lo desactivamos y desaparece visualmente del escenario.
3. Detectando Impactos con Obstáculos (Colisiones)
Para los obstáculos sólidos (muros o cilindros de peligro), queremos que bloqueen el paso pero que el código se entere del golpe para poder restar vidas o reiniciar. Agregaremos el método OnCollisionEnter al script del jugador:
- Selecciona tu cilindro u obstáculo en la jerarquía.
- En la parte superior del Inspector, cámbiale el Tag a "Obstacle" (créalo si no está en la lista).
- Asegúrate de que la casilla Is Trigger esté desactivada para que actúe como un muro físico.
4. Creando Obstáculos Móviles (Patrones de Movimiento)
Un prototipo se vuelve más divertido si añadimos movimiento a los peligros. Programaremos un obstáculo que patrulle de un lado a otro sobre la arena de juego:
- Crea un script llamado
ObstacleMovement. - Reemplaza el código por el siguiente:
Explicación: Mathf.PingPong(tiempo, distancia) genera un valor oscilante que sube y baja constantemente como un péndulo. Al sumarlo a la posición inicial, el cilindro se moverá de izquierda a derecha automáticamente.
Ponte a prueba
Comprueba si comprendes la diferencia entre las físicas de colisión sólida y el registro de sensores trigger.