Módulo 2 — Disparos (25 min)¶
¿Qué vamos a lograr?¶
Que al presionar Espacio salga una bala desde la punta de la nave, viajando hacia arriba, con un pequeño tiempo de espera entre disparo y disparo (para que no sea ametralladora infinita), y que cada bala se destruya sola al salir de la pantalla.
2.1 Crear el punto de disparo (FirePoint)¶
- Con el GameObject
Playerseleccionado, clic derecho sobre él en la Hierarchy > Create Empty. Esto crea un GameObject vacío como hijo dePlayer. - Renómbralo a
FirePoint. - En el Inspector, pon su Position en algo como
X = 0, Y = 0.5, Z = 0(en coordenadas locales, relativas a la nave) para que quede justo en la punta.
Un GameObject vacío como hijo no dibuja nada en pantalla: solo sirve como una "referencia de posición" que el script va a usar para saber dónde nace cada bala.
2.2 Crear la bala¶
- En la Hierarchy, clic derecho > 2D Object > Sprites > Square. Renómbralo a
Bullet. - En el Sprite Renderer, asígnale un sprite de la carpeta
Lasersdel pack de Kenney.
El script que controla la bala ya está escrito en
Bullet.cs:
using UnityEngine;
// Controla el comportamiento de cada bala disparada por el jugador:
// se mueve hacia arriba y se destruye sola después de un tiempo.
public class Bullet : MonoBehaviour
{
[Header("Movimiento")]
public float moveSpeed = 12f;
[Header("Duración")]
// Cuántos segundos vive la bala antes de autodestruirse.
// Esto evita que queden balas acumulándose fuera de la pantalla para siempre,
// lo que iría gastando memoria de a poco.
public float tiempoDeVida = 2f;
void Start()
{
// Destroy(gameObject, segundos) programa la destrucción de este GameObject
// luego de que pase esa cantidad de segundos.
Destroy(gameObject, tiempoDeVida);
}
void Update()
{
// transform.Translate mueve el objeto en la dirección indicada.
// Vector3.up equivale a (0, 1, 0): hacia arriba de la pantalla.
transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
}
}
Por qué se hace así: en vez de calcular los bordes de la cámara (como con la nave),
acá usamos un truco más simple: la bala se autodestruye después de tiempoDeVida
segundos, tiempo de sobra para que ya haya salido de la pantalla. Dos formas distintas de
resolver un problema parecido — vale la pena mencionarlo en el taller.
- Arrastra
Bullet.cssobre el GameObjectBulletpara agregarlo como componente.
2.3 Convertir la bala en un prefab¶
Un prefab es una plantilla reutilizable: la vamos a "instanciar" (crear copias) cada vez que se dispare, en vez de tener una sola bala fija en la escena.
- Arrastra el GameObject
Bulletdesde la Hierarchy hasta la carpetaAssets/Prefabs. - Una vez creado el prefab, borra el
Bulletque quedó en la Hierarchy (ya cumplió su función: ahora vive como prefab en el Project).
2.4 Conectar todo en el PlayerController¶
- Selecciona el GameObject
Player. - En el componente
Player Controllerdel Inspector: - Arrastra el prefab
Bullet(desdeAssets/Prefabs) al campo Bullet Prefab. - Arrastra el GameObject
FirePoint(desde la Hierarchy) al campo Fire Point. - Presiona Play y prueba disparar con Espacio.
Checkpoint ✅¶
Al terminar este módulo, al presionar Espacio deberían salir balas desde la punta de la nave, viajando hacia arriba a un ritmo controlado (no una por frame), y desapareciendo solas después de un par de segundos.



