Caídas
Lección 14 de 19 del curso Juego en Unity: Rompe ladrillos de Coddy.
A veces, un ladrillo roto suelta una mejora que cae hacia la paleta. Que la suelte depende de una tirada: Random.value es un número de punto flotante aleatorio entre 0 y 1, así que Random.value < 0.15f es verdadero aproximadamente 15 veces de cada 100. Mantener la probabilidad en un campo te permite ajustarla y también permite que una prueba la establezca en 1 para que siempre haya una caída o en 0 para que no haya ninguna.
Qué mejora cae se decide con una segunda tirada: un índice aleatorio en un arreglo de prefabs. Random.Range con enteros excluye el valor máximo, así que Random.Range(0, array.Length) puede elegir cualquier elemento. El botín de un enemigo:
public GameObject[] loot;
public float lootChance = 0.25f;
void DropLoot()
{
if (Random.value >= lootChance) return;
int pick = Random.Range(0, loot.Length);
Instantiate(loot[pick], transform.position, Quaternion.identity);
}Una mejora cae a velocidad constante al moverse por sí misma en cada fotograma, y se destruye cuando queda por debajo del área de juego, para que las que no se recogen no se acumulen. Su prefab tiene un Rigidbody cinemático y un collider de activación, por lo que el sistema de física sabe que se mueve y podrá detectar cuándo llega a la paleta.
Desafío
DifícilA veces, los ladrillos rotos dejan caer una mejora.
- En
PowerUp, añadefallSpeed = 3fybottomY = -9f; enUpdate(), haz que caiga a una velocidad de fallSpeed por segundo y destrúyelo cuando esté por debajo de bottomY. - En
GameManager, añadepublic GameObject[] powerUps;ypublic float dropChance = 0.15f; - En BrickBroken, si
Random.value < dropChance, instanciapowerUps[Random.Range(0, powerUps.Length)]en la posición del ladrillo.
Pulsa «Jugar» y rompe ladrillos: de vez en cuando, uno deja caer una mejora (lo siguiente será atraparla). Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class PowerUp : MonoBehaviour
{
// El último capítulo: mejoras que caen de los ladrillos rotos.
}
Todas las lecciones de Juego en Unity: Rompe ladrillos
Practica por tu cuenta: Playground de Unity