

17 novembre 2025
3 semaines

Haikyu!! Spike That!! est un jeu de sport multijoueur, plus précisément de volleyball, basé sur le manga du même nom.
Ce jeu est inspiré du jeu de football Rematch dans lequel le joueur ne contrôle qu'un joueur sur le terrain, et où il doit faire équipe avec d'autres joueurs.
Il s'inspire également du genre Heros Shooters avec son système de compétence/pouvoirs.
Dans un contexte d'exercice donné à l'école, je n'ai eu que trois semaines pour développer ce projet, documentation comprise. Je n'ai donc qu'implémenté dans le moteur une scène d'entraînement avec des IA. Je n'ai pas eu le temps d'intégrer le multijoueur.
3C
Personnage Joueur

Pour chaque personnage, je créer un Scriptable Object contenant différentes informations, notamment les sprites, le nom/description ainsi que les compétences du personnage.
De cette manière, il est aisé de créer un nouveau personnage et de le paramétrer.
Pour un jeu avec un personnage joueur si complexe, il est nécessaire de pouvoir ajuster énormément de paramètres. J'ai organisé le component du script de sorte que tout soit facilement trouvable.


Pour accompagner ce script complexe, un grand nombre de gizmos est intégré afin d'accompagner le designer.
Dans l'exemple ci-dessous, je suis en train de paramétrer les valeurs pour l'action de bloquer la balle. Je peux visualiser ce que ça rendrait en jeu à l'aide de variables de debug.
Il est possible de changer le debug de l'action actuelle via la variable en haut du component "Debug Action State".

Caméra
Dans un jeu avec autant d'actions différentes, avec leurs caractéristiques et utilités spécifiques, il me semblait nécessaire d'avoir une large variété de caméras. J'ai donc mis en place un système où, selon l'action du joueur, la caméra va se déplacer et tourner de manière progressive.

Caméra par défaut
Cette caméra sert à montrer l'ensemble du terrain selon point de vue du personnage. J'ai pris la décision de la placer sur l'épaule et légèrement en hauteur afin que le personnage ne prenne pas trop de place à l'écran.

Caméra d'attaque
Cette caméra est utilisée lorsque le joueur attaque. Je l'ai donc centré sur le terrain de l'équipe adverse afin de mieux visualiser l'endroit où le joueur souhaite attaquer.

Caméra de bloc
Cette caméra est utilisée lorsque le joueur est en train de bloquer. J'ai monté la caméra par rapport au joueur afin que les bras soient au centre de l'écran, et qu'il soit donc plus simple d'ajuster leur angle.

Caméra de passe
Cette caméra est utilisée lorsque le joueur est en train de faire la passe. C'est une sorte de caméra en vue du dessus qui montre l'ensemble du terrain de l'équipe du joueur, afin de lui permettre de plus facilement faire la passe à ses coéquipiers.

J'ai mis en place ce système via un script Camera Manager. Il répertorie toutes les caméras selon l'action du joueur ainsi que la durée de transition que la caméra va prendre de passer de sa position actuelle à la nouvelle.

COmpétences des Personnages


Les compétences des personnages sont elles aussi faites en partie faite à l'aide de Scriptable Objects.
Celui-ci contient les informations de la compétence, tel que son sprite, son nom/description ; mais aussi des informations utilitaires comme le Scriptable Object de l'effet de la compétence ainsi que le temps de recharge de ce dernier.
L'effet contient quant à lui seulement deux informations : sa durée et une référence du préfabriqué de l'effet visuel qui l'accompagne.
L'application de cet effet est contenu dans le code du Scriptable Object.
Une fois en jeu, on se retrouve alors avec un rendu comme ceci lorsque le joueur passe son curseur sur la compétence d'un personnage dans le menu de sélection des personnages.
Et on se retrouve avec un rendu comme dans l'image ci-dessous lorsqu'il utilise la compétence.


Physique de la Balle

Pour la physique de la balle, je ne me suis pas servi de la physique du moteur Unity, mais j'ai programmé la mienne. Cela me permet d'avoir un contrôle total sur le comportement dont j'ai besoin, et m'évite d'utiliser les calculs complexes de la physique native qui me sont inutiles et qui augmenteraient la probabilité de bogues.
J'utilise également un second script qui permet d'appliquer les réactions du ballon aux différentes actions des personnages, tel qu'un smash ou une réception.

Animations
J'ai commencé par récupérer des animations sur Mixamo, puis je les ai modifiés pour obtenir des animations de volleyball.
Pour ce qui est de la gestion de ces animations, j'utilise deux couches dans mon Animator : une pour l'animation de base, et une qui ne contrôle que le buste. Cette dernière vient ajouter ses modifications à l'animations de base, sans complètement la casser. Cela m'a permis d'économiser du temps d'animation mais également de plus facilement modifier une partie d'une animation dans le code pour qu'elle corresponde aux contrôles du personnage.

Couche de base

Couche du buste

Masque du buste




