Apocalypse Z :

Apocalypse Z est un jeu de tir immersif où les joueurs affrontent des hordes de zombies dans un monde post-apocalyptique. Avec des graphismes saisissants et une jouabilité intense, ce projet combine des mécaniques de survie captivantes avec des défis stratégiques. Développé avec Unity et C#, le jeu exploite tout le potentiel de ces technologies pour offrir une expérience fluide et palpitante.

Capture d'écran du gameplay de Apocalypse Z

Fonctionnalités Principales

1. Système de Combat

  • Weapon.cs : Gère les armes : tirs, munitions, effets visuels/sonores, et dégâts infligés aux ennemis.
    • Tirs contrôlés via Shoot().
    • Gestion des munitions avec AmmoType et affichage via ammoText.
    • Effets de tir : muzzleFlash, hitEffect.
  IEnumerator Shoot()
  {
      canShoot = false;
      if (ammoSlot.GetCurrentAmmo(ammoType) > 0)
      {
          PlayMuzzleFlash();
          ProcessRaycast();
          audioSource.PlayOneShot(gunSound);
          ammoSlot.ReduceCurrentAmmo(ammoType);
      }
      else
      {
          PlayEmptyGunSound();
      }
      yield return new WaitForSeconds(timeBetweenShots);
      canShoot = true;
  }

2. Santé du Joueur

  • PlayerHealth.cs : Traite la santé et l'affichage du joueur
    • Diminution via TakeDamage().
    • Mort déclenchée avec HandleDeath() (voir DeathHandler.cs).
    • Affichage de la santé avec healthBar.
public void TakeDamage(float damage)
{
    hitPoints -= damage;
    audioSource.PlayOneShot(hitSound);
    if (hitPoints <= 0)
    {
        audioSource.PlayOneShot(deathSound);
        GetComponent<DeathHandler>().HandleDeath();
    }
}
Capture d'écran du gameplay de Apocalypse Z

3. IA Ennemi

  • EnemyAI.cs : Comportement des ennemis.
    • Poursuite via ChaseTarget().
    • Attaque lorsqu'à portée via AttackTarget().
    • Détection du joueur avec chaseRange.
void EngageTarget()
{
    FaceTarget();
    if (distanceToTarget >= navMeshAgent.stoppingDistance) 
    {
        ChaseTarget();
    }
    if (distanceToTarget <= navMeshAgent.stoppingDistance) 
    {
        AttackTarget();
    }
}

void FaceTarget()
{
    Vector3 direction = (target.position - transform.position).normalized;
    Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x, 0, direction.z));
    transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * turnSpeed);
}
  • EnemyAttack.cs : Gère les attaques ennemies.
    • Dommages infligés au joueur via AttackHitEvent().
    • Sons de provocation avec provokedSound.
public void AttackHitEvent()
{
    if (target == null) { return; }
    target.TakeDamage(damage);
    audioSource.PlayOneShot(provokedSound, 0.2f);
    target.GetComponent<DamageDisplayer>().ShowDamageImpact();
}
Capture d'écran du gameplay de Apocalypse Z

4. Système de Mort

  • DeathHandler.cs : Gère la fin du jeu.
    • Écran de Game Over via gameOverCanvas.
    • Arrêt du temps et désactivation des commandes après la mort.
public void HandleDeath()
{
    gameOverCanvas.enabled = true;
    Time.timeScale = 0;
    FindObjectOfType<WeaponSwitcher>().enabled = false;
    Cursor.lockState = CursorLockMode.None;
    Cursor.visible = true;
}

5. Affichage des Dégâts

  • DamageDisplayer.cs : Affiche des effets d'impact visuels après des attaques ennemies.
    • Activation temporaire du canvas avec ShowDamageImpact().

public void TakeDamage(float damage)
{
    hitPoints -= damage;
    audioSource.PlayOneShot(hitSound);
    if (hitPoints <= 0)
    {
        audioSource.PlayOneShot(deathSound);
        GetComponent<DeathHandler>().HandleDeath();
    }
}

Points Techniques Clés

Gameplay

  • Gestion du temps et des états : Time.timeScale.
  • Animation des ennemis via l’Animator.
  • Navigation avec NavMeshAgent.

Sons

  • Audio intégré pour ambiance immersive (AudioSource, AudioClip).

Graphiques

  • Effets de tir et d'impact via des particules (ParticleSystem).

Capture d'écran du gameplay de Apocalypse Z

Exemple de Scénario

  1. Le joueur tire sur un zombie avec une arme :
    • Weapon.cs détecte le clic, déclenche Shoot().
    • Si le zombie est touché, EnemyHealth.TakeDamage() est appelé.
  2. Le zombie contre-attaque :
    • EnemyAI engage le joueur, EnemyAttack.AttackHitEvent() inflige des dégâts.
    • PlayerHealth.TakeDamage() met à jour la santé.
  3. Si la santé atteint zéro :
    • PlayerHealth appelle DeathHandler.HandleDeath().