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.

concept-art
Concept art sommaire et planification griffonnés avec un ami

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.