Cosmic Strike
 
Cargando...
Buscando...
Nada coincide
SpiralShot.cs
Ir a la documentación de este archivo.
1
10
11using UnityEngine;
12using System.Collections;
13
20{
24 [Header("Spiral Burst Settings")]
25 [Tooltip("Prefab del proyectil (con Rigidbody2D + DamageOnTrigger)")]
26 public GameObject bulletPrefab;
27
31 [Tooltip("Punto de salida; se rotará para generar el efecto espiral")]
32 public Transform firePoint;
33
37 [Tooltip("Número total de proyectiles en la ráfaga")]
38 public int bulletCount = 12;
39
43 [Tooltip("Duración total de la ráfaga (segundos)")]
44 public float burstDuration = 0.6f;
45
49 [Tooltip("Velocidad de cada proyectil")]
50 public float bulletSpeed = 8f;
51
55 void Awake()
56 {
57 // Si no lo asignaste manualmente, buscamos bajo el Player
58 if (firePoint == null && transform.parent != null)
59 {
60 firePoint = transform.parent.Find("FirePointCenter");
61 if (firePoint == null)
62 Debug.LogError("SpiralShot: no encontró 'FirePointCenter' en Player.");
63 }
64 }
65
69 public override void Shoot()
70 {
71 // Arranca la ráfaga en coroutine
72 StartCoroutine(SpawnSpiralBurst());
73 }
74
79 private IEnumerator SpawnSpiralBurst()
80 {
81 if (bulletPrefab == null || firePoint == null || bulletCount < 1 || burstDuration <= 0f)
82 {
83 Debug.LogWarning("SpiralShot: configura bulletPrefab, firePoint, bulletCount ≥1 y burstDuration >0.");
84 yield break;
85 }
86
87 float interval = burstDuration / bulletCount;
88 float angleStep = 360f / bulletCount;
89 Quaternion originalRot = firePoint.rotation;
90
91 for (int i = 0; i < bulletCount; i++)
92 {
93 // Calcula rotación incremental
94 firePoint.rotation = originalRot * Quaternion.Euler(0f, 0f, i * angleStep);
95
96 // Instancia el proyectil
97 GameObject b = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
98 if (b.TryGetComponent<Rigidbody2D>(out var rb))
99 rb.linearVelocity = firePoint.up * bulletSpeed;
100
101 // Espera antes del siguiente disparo
102 yield return new WaitForSeconds(interval);
103 }
104
105 // Restaura rotación original para futuros disparos
106 firePoint.rotation = originalRot;
107 }
108}
Clase base abstracta que define la interfaz de comportamiento para proyectiles. Cada clase hija debe ...
Dispara una ráfaga de proyectiles en forma de espiral. Cada disparo se realiza con una rotación incre...
Definition SpiralShot.cs:20
GameObject bulletPrefab
Prefab del proyectil a instanciar. Debe contener Rigidbody2D y sistema de daño.
Definition SpiralShot.cs:26
void Awake()
Si no se asignó manualmente el firePoint, se intenta encontrar uno bajo el objeto padre llamado "Fire...
Definition SpiralShot.cs:55
IEnumerator SpawnSpiralBurst()
Corrutina que instancia los proyectiles de forma secuencial mientras incrementa la rotación del fireP...
Definition SpiralShot.cs:79
float bulletSpeed
Velocidad a la que se desplazan los proyectiles.
Definition SpiralShot.cs:50
override void Shoot()
Método principal que se llama para iniciar el disparo. Lanza la corrutina que gestiona la ráfaga espi...
Definition SpiralShot.cs:69
int bulletCount
Cantidad total de proyectiles que se dispararán en la ráfaga.
Definition SpiralShot.cs:38
float burstDuration
Duración total de la ráfaga (en segundos).
Definition SpiralShot.cs:44
Transform firePoint
Punto desde el que se lanzan los disparos. Su rotación se modifica durante la ráfaga.
Definition SpiralShot.cs:32