'Waybound', concevoir un jeu
Introduction
Alors que jâĂ©tais sur le point de commencer un nouveau projet Unity aprĂšs avoir terminĂ© lâexpĂ©rience prĂ©cĂ©dente, jâai revu un film apaisant vu il y a dix ans et jâai rĂ©flĂ©chi Ă lâinfluence des expĂ©riences. Une fois mes idĂ©es clarifiĂ©es, jâai pensĂ© que tout comme un bon film laisse une bonne expĂ©rience, je voulais crĂ©er quelque chose de similaire. Jâavais aussi envie de crĂ©er et dâexprimer diverses choses, comme dâhabitude.

En me concentrant sur lâexpĂ©rience, jâai imaginĂ© un environnement oĂč les objets de la scĂšne interagissent spontanĂ©ment entre eux, mĂȘme sans aucune action du joueur. Un jeu oĂč lâon se contente dâobserver et de se promener, sans score ni condition de fin.
Jâai rapidement esquissĂ© lâidĂ©e ci-dessus, et le rendu Ă©tant plutĂŽt bon et les retours positifs, jâai commencĂ© Ă Ă©laborer un plan sur cette base.
Planification
Ce qui mâavait le plus manquĂ© prĂ©cĂ©demment, câĂ©tait lâabsence de planification. Sans indicateurs de rĂ©fĂ©rence ni plan Ă long terme, il Ă©tait difficile de dĂ©finir la direction du jeu Ă un niveau macro, et Ă un niveau micro, de penser Ă la rĂ©tention ou Ă la rentabilitĂ©. Cette fois, je voulais donc structurer un minimum la planification en amont.
En cherchant des concepts utiles pour la planification de jeu, jâai dĂ©couvert le GDD (Game Design Document). Câest une sorte de cahier des charges du jeu, sans format fixe. Je me suis rĂ©fĂ©rĂ© au modĂšle de GDD créé par Unity pour ne dĂ©crire Ă lâavance que les parties nĂ©cessaires.
GDD simplifié
- Description générale
- Nom : Waybound (íì ì§)
- Genre : Aventure side-scrolling
- Format : Mobile 2.5D
- Gameplay
- Le joueur devient une crĂ©ature composant lâenvironnement (humain, chien, chat, fourmi, etc.) dans un cadre pĂ©riurbain et effectue les interactions propres Ă cette crĂ©ature. Par exemple, un humain sort une boisson dâun distributeur, un chien renifle lâodeur dâun banc.
- MĂȘme sans contrĂŽle particulier du joueur, les crĂ©atures interagissent entre elles et composent lâambiance pĂ©riurbaine, chaque crĂ©ature ayant une personnalitĂ© visuelle dans une plage dĂ©finie.
- Caractéristiques principales
- Interactions variées entre objets
- Images dessinées à la main et animation cut
- Expérience changeante selon la météo (pluie, neige)
Exemples dâobjets
mindmap
root((Objets))
Objets vivants
Humain
Chien
Chat
Pigeon
Fourmi
Luciole
Objets non-vivants
Distributeur
Banc
Poubelle
Ătal de rue
Objets de décor
Villa
Ăpicerie
Café
Bar
Métro
Exemples dâinteractions
graph TD;
Humain -- Acheter une boisson --> Distributeur;
Humain -- Promener --> Chien;
Humain -- Caresser --> Chat;
Humain -- Regarder --> Luciole;
Humain -- S'asseoir --> Banc;
Humain -- Acheter Ă manger --> Ătal;
Objectifs
Objectifs techniques
JusquâĂ prĂ©sent, jâavais souvent des confusions dans la nomination des variables et des fonctions. Nâayant ni cohĂ©rence ni intuitivitĂ©, lire et modifier le code devenait de plus en plus pĂ©nible.
Puis je suis tombĂ© sur un article sur les conventions de nommage sur le blog Unity, et jâai Ă©tĂ© un peu choquĂ©. Si jâavais su cela dĂšs le dĂ©but, jâaurais eu la vie bien plus facile. Finalement, jâai pu comprendre clairement quand et comment utiliser les noms de variables et de fonctions en C#, et ce quâil ne fallait pas faire.
En cherchant sâil y avait dâautres pratiques Ă connaĂźtre, jâai dĂ©couvert lâe-book âLevel up your code with game programming patternsâ Ă©galement publiĂ© par Unity. En le lisant attentivement, jâai appris lâexistence de diverses techniques applicables comme les principes SOLID, le pattern factory, le pattern state, etc. En explorant les patterns dĂ©rivĂ©s, jâai trouvĂ© des choses que je voulais essayer pour une conception de code plus systĂ©matique. Voici ce que jâai retenu :
- PlasticSCM
- Programmation événementielle
- Animation procédurale
- Conventions de nommage strictes
Parmi eux, PlasticSCM est un systĂšme de contrĂŽle de version (VCS) destinĂ© Ă remplacer GitHub, que jâutiliserai pour sauvegarder mon travail de temps en temps pendant le dĂ©veloppement. La programmation Ă©vĂ©nementielle, les conventions de nommage sont au cĆur des compĂ©tences de dĂ©veloppement que je veux acquĂ©rir via ce projet. Jâai aussi des objectifs plus modestes comme mieux utiliser le pattern singleton, les coroutines, les delegates, les propriĂ©tĂ©s get/set, etc., qui ne me sont pas encore familiers.
Objectifs artistiques
Lâobjectif fondamental est de dĂ©crire lâatmosphĂšre quotidienne qui nous entoure, Ă travers lâexpĂ©rience de traits et dâimages en mouvement. Jâaimerais exprimer ces choses dâune maniĂšre suffisamment visible mais non agressive. Si possible, je vise une mise en scĂšne proche de lâexpression vidĂ©o, avec concrĂštement :
- Animation cut
- Profondeur de champ dynamique
- Courbes tonales
Globalement, jâaimerais crĂ©er un niveau oĂč lâutilisateur trouve du plaisir mĂȘme Ă simplement regarder lâĂ©cran du jeu sans rien faire. Cependant, je mâinquiĂšte dâavoir ce niveau de compĂ©tence â notamment, jâai entendu dire que dessiner les mouvements dâanimaux comme les chiens, les chats et les pigeons en animation cut relĂšve du domaine des animateurs professionnels. Je nâai pas besoin dâune animation aussi prĂ©cise, mais nâayant ni connaissances de base ni expĂ©rience, il y aura probablement des essais et erreurs.
Roadmap
gantt
title 1Ăšre roadmap
Section Planification
Planification :a1, 2024-02-28, 1d
Section Développement
Développement du prototype :a2, 2024-02-28, 85d
Composition visuelle: a3, 2024-05-23, 10d
Section Lancement
Lancement et support :a4, 2024-06-01, 213d
%% a2["Prototype terminé"] : Développer la version initiale du prototype pour vérifier les fonctionnalités et tester.