

6 juillet 2025
4 semaines
Wheel Escape
Wheel Escape est un jeu de course sans fin, un genre principalement présent sur les appareils mobiles. J'ai créé ce jeu entièrement par moi-même afin de me donner des défis sur tous les aspects du développement d'un jeu vidéo.
L'idée m'est venue lors d'un cours de génération procédurale sur Unreal Engine. En voyant mes amis s'amuser avec ce petit jeu bogué, je me suis toujours dit que je le referai correctement sur Unity Engine.
L'objectif de ce projet était de m'entraîner à la génération procédurale. J'ai donc créé un système de génération de cellules avec des règles permettant d'obtenir un gameplay infini.
Télécharge le jeu !
Personnage Joueur





J'ai commencé par créer mon personnage et ses déplacements. J'avais en tête un gameplay rapide, alors il fallait que les mouvements du personnage aillent en ce sens.
Pour ce qui est du déplacement avant, comme dans tout jeu de ce genre, ce n'est pas le joueur qui avance mais le terrain qui recule.
En ce qui concerne les déplacements latéraux, le saut et la glissade, je modifie les valeurs X et Y d'un vecteur dans des coroutines au moment voulu. J'applique ensuite constamment ce vecteur à la vélocité de mon personnage dans ApplyMovement().
Cela permet d'avoir des mouvements précis : mon personnage est constamment au centre de la rangée et n'en déborde pas de ne serait-ce qu'un millimètre.
Je peux ensuite facilement modifier dans l'éditeur les variables de vitesse de déplacement, de hauteur et durée de saut, de durée de glissade et de durée d'attaque.


Cellules


J'ai décidé de ne créer qu'un seul préfabriqué de cellule et d'y organiser les différents types. L'étape suivante consistait à modifier le type dans le code de la cellule lui-même.
J'ai opté pour six types de cellules afin d'avoir une variété suffisamment large pour que chacune puisse mettre le joueur au défi d'une manière différente :
-
Un type neutre qui permet au joueur de naviguer librement
-
Un muret qui demande au joueur de sauter par-dessus
-
Une barrière qui demande au joueur de sauter par-dessus ou bien de glisser en dessous
-
Un avec un mur qui bloque totalement le joueur et lui demande d'esquiver l'obstacle
-
Un ennemi qui peut être éliminé et qui rapporte des points de score
-
Une pièce qui rapporte des points de score une fois que le joueur traverse celle-ci
Génération Procédurale
J'ai voulu me créer un outil qui me permettrait facilement d'itérer et de tester mes règles de génération procédurale.
Pour chaque type de cellule, je possède une fenêtre dans laquelle se trouve plusieurs listes :
-
Chaque liste représente une cellule aux alentours de la cellule présente.
-
Dans chaque liste se trouve les types de cellules pouvant apparaître.
-
En bas de fenêtre se trouve un schéma représentant les cellules autour de celle actuelle. Les types en vert sont ceux pouvant apparaître, tandis que ceux en noir sont ceux ne pouvant pas.
Étant donné que mes cellules apparaissent de bas en haut et de gauche à droite, il est inutile de définir les cellules à droite et au-dessus de celle actuelle car elles n'existent tout simplement pas encore.
Type de cellule sélectionné
Types de cellule pouvant apparaître à gauche
Autres emplacements de types de cellule
Schéma des cellules alentours




Par exemple, sur cette capture d'écran, je suis en train de définir les règles concernant la cellule de type mur. La liste ouverte est celle de la cellule à gauche de la cellule actuelle. On peut voir que dans celle-ci se trouve tous les types de cellule excepté le mur. Cela veut donc dire qu'un mur ne peut pas apparaître à côté d'un autre mur.
Déplacement du terrain

Extrait de gameplay d'une des premières version du jeu
Mon terrain avance vers le joueur, ce n'est pas le personnage du joueur qui avance vers l'avant. Cela permet de toujours garder une vue d'ensemble lorsque l'on travaille dans la scène.
Le jeu contient plusieurs sections, qui chacune modifie la vitesse de déplacement du terrain et ajoute des types de cellules.
Par exemple, les ennemis n’apparaissent qu’au bout de trente secondes, lors du premier changement de section.
Le script est organisé de sorte que chacune de ces variables soient facilement identifiable et que l'on ne s'y perde pas. Il est aisé pour quelqu'un n'ayant pas travaillé sur le projet d'ajouter de nouvelles sections ou bien de modifier des valeurs.

Graphismes
Shader

J'ai créé un shader que j'applique à tous mes sprites de sorte qu'ils suivent une courbe, donnant des sensations de virages et de dénivelés.
Ceci n'est que visuel, car le jeu est bel et bien une ligne droite en termes de technique.

Quelques sprites








