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.
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
AmmoTypeet affichage viaammoText. - Effets de tir :
muzzleFlash,hitEffect.
- Tirs contrôlés via
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()(voirDeathHandler.cs). - Affichage de la santé avec
healthBar.
- Diminution via
public void TakeDamage(float damage)
{
hitPoints -= damage;
audioSource.PlayOneShot(hitSound);
if (hitPoints <= 0)
{
audioSource.PlayOneShot(deathSound);
GetComponent<DeathHandler>().HandleDeath();
}
}
3. IA Ennemi
- EnemyAI.cs : Comportement des ennemis.
- Poursuite via
ChaseTarget(). - Attaque lorsqu'à portée via
AttackTarget(). - Détection du joueur avec
chaseRange.
- Poursuite via
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.
- Dommages infligés au joueur via
public void AttackHitEvent()
{
if (target == null) { return; }
target.TakeDamage(damage);
audioSource.PlayOneShot(provokedSound, 0.2f);
target.GetComponent<DamageDisplayer>().ShowDamageImpact();
}
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.
- Écran de Game Over via
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).
Exemple de Scénario
- Le joueur tire sur un zombie avec une arme :
Weapon.csdétecte le clic, déclencheShoot().- Si le zombie est touché,
EnemyHealth.TakeDamage()est appelé.
- Le zombie contre-attaque :
EnemyAIengage le joueur,EnemyAttack.AttackHitEvent()inflige des dégâts.PlayerHealth.TakeDamage()met à jour la santé.
- Si la santé atteint zéro :
PlayerHealthappelleDeathHandler.HandleDeath().