Tanky
ZQSD : Déplacements
Clic droit : Tirer (Maintenir enfoncé pour tir chargé)
Architecture du projet :
Les scripts Tank et Turret sont tous les deux en 'abstract' .
Les scripts PlayerTank ou EnemyTank vont gérer le déplacement du tank. Pour le joueur Z et S permettent d'avancer ou de reculer tandis que Q et D permettent d'effectuer une rotation du tank, le tank avancera toujours par rapport à son axe forward. Le tank ennemi à une IA basique qui va lui donner une position aléatoire à atteindre, le script prend bien évidemment en compte les obstacles et la taille du tank. Pour cela on utilise un raycast pour vérifier qu'aucun obstacle se trouve dans la direction de la position à atteindre puis également un Physics.OverlapSphere avec '1' de rayon pour vérifier qu'aucun mur ne se trouve trop proche de la cible.
Les scripts PlayerTurret ou EnemyTurret vont quant à eux gérer l'orientation de la tourelle et les tirs de celle-ci. EnemyTurret est également utilisable sur la tourelle fixe, les scripts de 'Tank' et 'Turret' sont tous indépendants. Les tourelles ennemies tireront seulement si le joueur est visible.
Gestion de la caméra :
Utilisation d'une virtual camera de Cinemachine avec son body en 'Framing transposer' . Ajout également d'un 'Noise' avec le '6D Shake' en profil, cela permet à partir de la méthode ShakeCamera() du script CameraShaker de modifier l'amplitude pour pouvoir appliquer un tremblement à la caméra.
Tir :
À partir du script PlayerTurret nous effectuons une rotation de la tourelle en direction de la position de la souris. D'un clic droit nous tirons par rapport au forward de la tourelle, il y à un délai d'une seconde entre chaque tir. Possibilité d'effectuer un tir chargé de 2sec en restant appuyé sur clic droit, avec un Mathf.Lerp j'ai interpolé la vitesse de base de la balle (20) et la vitesse max d'un tir chargé (40) en fonction du temps resté appuyer. Pendant le chargement du tir une flèche apparait et s'étire pendant tout le chargement. J'ai utilisé pour cela une animation de 2sec, je viens désactiver l'objet à chaque tir et le réactiver à chaque début de tir chargé ce qui vient relancer l'animation de 0.
Portes :
Une porte à trois points de vie, à chaque tir reçu la porte vient rapidement flasher en blanc. À sa destruction une explosion est jouée.
Gestion de la vie :
Avec le script VehicleLifeManager nous gérons donc les points de vie des véhicules (Tank, tourelle) mais également leur affichage par UI. Les dommages sont affichés de manière différée en utilisant de nouveau un Mathf.Lerp pour interpoler le pourcentage de vie actuel affiché dans l'UI et le pourcentage de vie courant par rapport à un délai de 2sec mis en pourcentage.
Fondu écran noir :
J'ai créé deux animations sur une image noire qui recouvre l'écran, ces deux animations sont lançables à partir de la classe GameManager avec les méthodes StartGame() et EndGame(). La classe GameManager est d'ailleurs un singleton.
Leave a comment
Log in with itch.io to leave a comment.