Proiettili 2D

February 24, 2026 · View on GitHub

Sistema per creare proiettili con traiettoria curva.

// Creazione manuale di un proiettile
GameObject projGameObject = Instantiate(_projPrefab, transform.position, Quaternion.identity);
if (projGameObject.TryGetComponent(out IProjectile projectile))
{
    // Imposta bersaglio, velocità massima e altezza relativa
    projectile.InitProjectile(_target.position, _projMaxMoveSpeed, _projMaxHeight);
    // Applica le curve della traiettoria, correzione asse e velocità
    projectile.InitAnimationCurves(_trajectoryCurve, _axisCorrectionCurve, _projSpeedCurve);
}

Il componente Projectile2D calcola la traiettoria leggendo tre AnimationCurve:

  • ProjSpeedCurve – definisce l'andamento della velocità.
  • TrajectoryCurve – descrive l'arco principale.
  • AxisCorrectionCurve – corregge la posizione sull'asse secondario.

Esempio di impostazione [Asse X, Asse Y] nel tempo:

  • ProjSpeedCurve: [0, 1], [0.5, 0.5], [1, 1]
  • TrajectoryCurve: [0, 0], [0.5, 0.6], [1, 1]
  • AxisCorrectionCurve: [0, 0], [0.4, 0.5], [1, 1]

Quando raggiunge il bersaglio il proiettile invoca l'evento OnHit. Tramite questo evento è possibile restituire l'oggetto a un pool implementando IPoolable o attivare altri effetti.

Per un feedback visivo aggiungere ProjectileVisual2D, che ruota il modello seguendo la direzione e sposta l'ombra.

_projectileVisual.SetTarget(_target.position);

Per un uso rapido è disponibile Shooter, che istanzia il prefab ogni _shootRate secondi e inizializza automaticamente l'IProjectile con i parametri e le curve specificate.