Alhomepage

Alexandre Venet

Image

Glub

Projet de fin d'études

Mon premier jeu complet et réalisé avec Unity, à la suite de ma formation à la 3WAcademy en 2021, pendant la crise sanitaire de la maladie Covid-19.

Présentation

À destination des enfants de 7 ans, Glub est un jeu type casual et arcade. Le joueur contrôle un personnage qui doit cogner des cubes pour obtenir des étoiles. L’objectif est de faire le plus haut score.

Les cubes tombent du ciel à des positions aléatoires et par intervalle régulier. Ils roulent vers l’extérieur du plateau de jeu.

Le jeu se divise en divers niveaux qui durent 30 secondes chacun. Un réveil tombe 5 secondes avant la fin du compte à rebours ; le collecter réinitialise le compte à rebours et fait passer au niveau suivant.

La partie est perdue si le personnage tombe du plateau ou si le compte à rebours est terminé.

Des bonus, à déverrouiller selon les niveaux de score obtenus, sont prévus mais ne sont pas réalisés à ce jour. Je me suis concentré sur le noyau du jeu et l’expérience principale.

Ce projet est conçu pour le Cross Platform : on peut y jouer sur mobile, WebGL ou PC. Les entrées utilisateurs sont temps réel, c'est-à-dire que l'on peut par exemple jouer sur un terminal tactile et passer à un contrôle clavier-souris ou manette sans interruption ni superposition. Le contrôle mobile est inspiré du jeu Sky de That Game Compagny.

Ce jeu fait l'objet de Responsive Design : sur mobile en particulier, les orientations portrait et paysage sont prises en charge, ce qui influence le gameplay (portrait : 1 doigt pour le déplacement, paysage : 2 doigts pour le déplacement et un autre pour la rotation caméra) et ce qui influence aussi l'affichage des éléments à l'écran (position, dimensions...).

Images

  • Image
  • Image
  • Image
  • Image

Mobile

Voici à télécharger le fichier .apk pour mobile Android. Reportez-vous à la documentation de votre appareil ou de son système d'exploitation pour permettre la lecture de ce genre de fichier.

Télécharger

WebGL

Glub est jouable en WebGL sur la plateforme Itch.io ainsi que sur celle d'Unity Learn. Vous pouvez ainsi lancer votre partie dans le navigateur et avec le terminal de votre choix.

Difficultés

J’ai rencontré de nombreuses difficultés au cours de la réalisation. D’une part, difficultés dû à mon niveau (j’ai encore beaucoup de choses à apprendre) ; d’autre part, difficultés liées aux fonctions utilisées (manque de guides, technologie non finalisée…).

Le package InputSystem manque de cours. Les tutoriaux disponibles sur le web ne sont que l’exposition de mise en œuvre de compétences, d’une technique, et non des explications pédagogiques. Ce qui s’approche le plus d’un cours est proposé par Unity Technologies ou par de rares professionnels à la sensibilité enseignante et qui justifient leurs décisions, mais malheureusement cela se réduit souvent à un survol.

Actuellement, dans le build PC, le contrôle souris ne fonctionne étrangement pas mais je ne connais pas d’autres bugs concernant les contrôles que ce soit sur Android ou WebGL.

L’interface utilisateur en Responsive Design est intéressante mais l’architecture choisie ne me satisfait car elle est peu modulable. Par exemple, il est malaisé d’ajouter un bouton dans un écran. Ceci est dû aux Layouts qui organisent l’affichage et au fait de devoir ajouter des scripts spécifiques pour contrôler cet affichage selon les dimensions de l’écran ou la nature du terminal. D’autre part, les boutons sont réalisés à partir du composant Button fourni nativement dans Unity. S’il s’avère pratique et rapide à mettre en place, l’utiliser de façon plus précise avec des animations semble pousser la chose dans ses retranchements. En effet, un curieux « scintillement » apparaît lorsque ces boutons sont activés, les retours sonores peuvent ne pas se déclencher. On ne sait pourquoi…

L’Editor Scripting permet de présenter les composants de façon personnalisée ou de réaliser des outils internes à l’éditeur. J’y ai eu recours tout au long du projet et avec un certain plaisir tant cela apporte du confort d’utilisation. Néanmoins, il me semble qu’Unity manque d’organisation à ce sujet. En effet, pas moins de 3 classes différentes de GUI sont disponibles avec leur cortège de nuances et de détails alors qu’elles apparaissent orientées vers la même finalité ; certaines fonctions sont non documentées (comme les listes organisables pourtant fort utiles) ; la structure d’un script d’éditeur varie considérablement selon qu’on utilise ou non des valeurs sérialisées, donc il faut chercher à chaque fois une nouvelle structure ; certains éléments sont réfractaires à l’affichage comme les Dictionary C#, ce qui est source de frustration bien que l’on puisse contourner le problème avec des structs ou des classes ; à ma connaissance, il n’est pas possible de gérer l’affichage avec la simplicité, par exemple, des feuilles de styles CSS, j’ai d’ailleurs recodé le fonctionnement du Flex pour obtenir un affichage d'éléments flexibles ou fixes sur une ligne et ce relativement à la taille de la fenêtre. Bref, rien de simple…

Bilan

Unity est un excellent environnement de travail. S’il est facile à prendre en main, réaliser un projet avec cet outil ne l’est pas et demande de l’entraînement et beaucoup, beaucoup de temps de recherche. Monter en compétences s’effectue lentement tant il y a de nombreux modules spécifiques et de nombreuses situations particulières à traiter. On pourrait demander à un logiciel qui a plus de 15 ans d’existence d’être parfois mieux organisé, ou qu’il s’organise du simple au complexe (on a souvent sous les yeux une batterie de paramètres peu hiérarchisée).

Toutefois, je souhaite formuler des remerciements : à Unity Technologies pour l’effort de fournir une documentation claire et suffisante, bien que parfois équivoque et pas suffisante du tout, ainsi que pour les présentations des fonctionnalités sur Unity Learn ; aux personnes qui ont partagé leurs connaissances dans des articles ou vidéos et qui m’ont ouvert des pistes de réflexion ; à vous qui avez testé et testez encore le jeu.

Le projet est bouclé dans sa version actuelle. Je retourne maintenant à mes explorations des patrons de conception, d’URP, de l’InputSystem, de l’Editor Scripting, ou de l’inverse kinematics… Sans ce projet, c’est-à-dire en étant resté à des recherches de prototypes ou de fonctions, je n’aurai jamais rencontré les nouveaux problèmes qui se sont posés et qui ont été autant d’occasions d’apprentissage et d’enrichissement.

www.alhomepage.com/glub

Par Alexandre Venet, le 05-05-2021

Haut de page