Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Créer des jeux 2D avec Unity

Par Nicolas MOUGINOT Publié le 10/07/2019 à 17:57:48 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Chaque style de jeux à ses propres contraintes et certains se prêtent plus facilement à un développement avec peu de ressources alors que d'autres sont presque impossibles à atteindre à cause de leurs pré-requis. Il est important d'avoir conscience de ces différences et avant tout projet (surtout s'il est long ou avec un impact important) faire une rapide analyse du travail à réaliser et de la durée potentielle de celui-ci. Il y a beaucoup de personnes qui se lancent sur unity puis qui arrêtent car ils ont visé trop haut. Cette phrase est un grand classique et pourtant parfois c'est dur d'anticiper les besoins d'un projet, c'est pourquoi cet article présente quelques exemples sur les styles classiques.

Je vais vous donner mon point de vue avec une courte description, un niveau de difficulté (facile / moyen / difficile) pour en réaliser un clone sur unity et quelques astuces pour vous donner un point de départ sur chaque étape sauf pour les jeux classés "Difficile" car je ne les ai pas réalisés (et je vous les déconseille).

Suite à cet article il y aura des tutoriels pour réaliser les jeux qui se trouvent dans cette liste.(Toujours avec l'exception des jeux classés difficiles)

Liste des jeux avec leurs difficultés

  • Facile - Plates-formes (Mario)

  • Facile - Jeu de course

  • Facile - Shoot 'em up

  • Moyen - Tower Defence (Infinitode 2)

  • Moyen - Danmaku / bullet hell (Touhou Bunkachou)

  • Moyen - Versus fighting (brawlhalla)

  • Difficile - Beat them all

  • Difficile - Stratégie au tour par tour (Final fantasy tactics A2)

  • Difficile - Stratégie en temps réel (Starcraft 2)

  • Difficile - Jeu de gestion (roller coaster tycoon 2)

Jeux de Plates-formes (Mario-like)

Les jeux de plates-formes basiques sont assez simples à faire en général, en premier lieu, beaucoup de monde commence par ceux-là donc il y a énormément de tutoriels sur internet et aussi car il y a peu de contenu à créer.

Voici une liste générale des choses à mettre en place :

  • Les contrôles (gauche, droite, saut (voir une arme telle qu'une épée ou un pistolet))

  • Le terrain (assez basique et plat, simple à réaliser si vous ne faites pas trop de fantaisie telle que des blocs destructibles ou qui se déplacent)

  • Les ennemis (Les IA les plus simples du monde à créer, ils vont en direction du héros et sautent si un obstacle est devant eux.)

  • La caméra (Il suffit de la faire suivre le héros. Ca reste le point le plus dur en général car ce n'est pas forcément intuitif par rapport aux étapes ci-dessus)

Bien sur il est toujours possible de complexifier le jeu en ajoutant de la difficulté sur chacun de ces points, des contrôles en plus avec plusieurs armes ou des évolutions comme avec mario qui a les boules de feu ou la carapace bleue, un terrain très diversifié avec des blocs qui ont des patterns, des éléments et des propriétés (glace, sol collant qui empêche de sauter, ...), des ennemis qui ont des armes, qui hit&run ou même avec des attributs spécifiques comme un fantôme par exemple, une caméra avec une vitesse définie qui peut tuer le joueur s'il est bloqué ou trop lent ... mais la base du jeu est très accessible à réaliser, donc en premier lieu, faite une version qui fonctionne avec tous les éléments !

Pour faire un mario-like voici quelques conseils et liens utiles :

  • Pour les contrôles, utiliser l'InputManager ! C'est un réflexe à prendre qui vous sera utile plus tard. (Pour l'ouvrir : Edit => Project Settings => Input)

  • Pour le terrain il n'y a pas vraiment de conseils, penser simple et utiliser les systèmes de collision déjà existants tels que les boxCollider2D et les Rigidbody2D

  • Pour les ennemis, même système de collision que le terrain il faudra juste leur attacher un script pour le déplacement "IA" et penser à les faire disparaître quand le joueur leur saute dessus !

  • Pour la caméra le déplacement passe aussi par un script. Un petit tuto pour aider

Jeu de course

Les jeux de course sont encore plus simples qu'un jeu de plates-forme à mettre en place ! ... enfin ça c'est la théorie ....

Le plus gros problème avec ce genre de jeu c'est que la qualité dépend énormément des contrôles, faire un objet qui accélère et qui tourne c'est simple, toute la difficulté est de rendre cela agréable et facilement maniable.

Voici une liste générale des choses à mettre en place :

  • Les contrôles du véhicule

  • Le terrain

  • Les check-points (facultatif)

Comme vous pouvez le voir il y a très peu de choses, mais toute la difficulté va être dans le paramétrage et la précision. La conduite doit être fluide, agréable mais pas non plus trop maniable ou le jeu sera trop simple. On peut toujours ajouter des fonctionnalités telles que les dérapages ou un boost. La deuxième partie la plus chronophage après avoir ENFIN réussi à calibrer votre voiture va être la route. Soit vous faites une map "ouverte" où l'on peut sortir de la route mais on est ralenti par le sol, ou bien vous faites des bordures qui vont stopper la voiture, un mélange des deux est bien aussi. Le parcours aussi peut être évolué avec des zones qui accélèrent la voiture, d'autres qui coupent le moteur ou bien qui modifient l'adhérence (terre, béton, glace ...) un terrain de jeu de voiture peut vraiment être très évolutif et proposer un nombre de défis surprenants pour le développer !

Pour faire un TrackMania-like voici quelques conseils :

  • Pour les contrôles, utiliser l'InputManager ! C'est un réflexe à prendre qui vous sera utile plus tard. (Pour l'ouvrir : Edit => Project Settings => Input)

  • Pour le paramétrage des contrôles (angles max, vitesse max, accélération...) utiliser des attributs publics, cela vous permettra de les modifier en jeu dans l'inspector quand vous sélectionnez votre véhicule.

  • Pour le terrain, commencer simple pour avoir une base jouable, plus tard vous pourrez faire votre super looping ;)

  • Ne pas réinventer la roue, il y a déjà des objets pour faire les collisions et la physique dans unity, prendre le temps d'apprendre à s'en servir est plus rapide que le re-développer.

Ici je parle d'un jeu vu du dessus, mais souvent les jeux de course sont en 3D .... et là, le plus gros problème est que vous allez devoir ajouter une caméra qui suit la voiture correctement dans toutes les situations ! (Virage, différence de hauteur, looping ...) donc le plus simple est de commencer par les basiques avant de se lancer dans cette aventure nouvelle.

Shoot 'em up

Le Shoot 'em up est le jeu classé simple qui commence à avoir des IA intéressantes ! (Quoi que, je devrais plutôt parler de pattern que d'IA). Enfin, cela est vrai quand l'on va parler des boss, les monstres de base ne sont pas très intelligents en soit. Je classe ce jeu comme simple car, comme les autres au-dessus, avoir une version jouable et basique EST simple, mais le potentiel de complexification est très important sur ce jeu-ci justement à cause des boss.

Voici une liste générale des choses à mettre en place :

  • Les contrôles du vaisseau (haut, bas, gauche, droite, tirer)

  • Les ennemis et les Spawners.

  • Les Boss

Si vous avez réalisé un des jeux au-dessus, il n'y a rien de nouveau dans celui-là mise à part les spawners qui vont générer les ennemis. Vous pouvez écrire les spawns à la main pour faire de jolies dessins avec les ennemis ou bien faire une génération semi-aléatoire avec un délai variable (par exemple, un ennemi apparait toutes les 10~15 secondes sur ce spawner) de plus, on pourrait croire que faire tous les ennemis est long, car ils sont une part importante du gameplay... Mais vous pouvez facilement tricher là-dessus, il suffit de faire des ennemis avec des "niveaux". par exemple un vaisseau ennemi en triangle qui tire devant lui ... vous changer un peu sa forme ou même juste sa couleur et vous faites deux tirs devant lui, ou des tir à 45% en plus du tir en face ... il y a beaucoup de façon de complexifier un ennemi sans avoir à redévelopper les mécaniques de base telle que le déplacement ou le tir.

Le boss est le point "Critique" pour le début faite simple, un gros truc, avec beaucoup de vie, qui se déplace uniquement de gauche à droite avec plus de tirs que les ennemis "classiques". Voilà ! Vous avez une première version simple du jeu !

Les points possible à améliorer :

  • Des ennemis avec des patterns de mouvement et de tir plus complexes

  • Faire des vagues semi-aléatoires avec quelques vagues prédéfinies à des moments précis.

  • Créer des projectiles spéciaux qui se séparent en deux, qui rebondissent, qui ont des variations de vitesse...

  • Faire des boss complexes avec les patterns de déplacement et de tir, faire des conditions spécifiques pour piéger le joueur "Si le joueur reste en bas à droite plus de 3 secondes, faire ceci".

  • Faire des bonus pour le joueur (un bouclier, des tirs en plus, vitesse max en plus, un boost pour esquiver ...)

Pour faire un Shoot 'em up voici quelques conseils :

  • Pour les contrôles, c'est du classique ! InputManager / boxCollider2D / Rigidbody2D

  • Pour les ennemis, les scripts de base peuvent être très simples, par exemple avancer en ligne droite et faire apparaitre une balle toutes les 1,5 secondes.

  • Le premier boss aussi peut être très basique, il faut juste lui donner beaucoup de pv

  • Pour la gestion des vagues, vous pouvez faire un système de points cachés pour vous simplifier la vie, par exemple quand le joueur à détruit 50 ennemis, faire apparaitre le boss

Tower Defence

Enfin, le premier jeu de niveau moyen ! On entre dans la catégorie la plus intéressante car elle est réalisable mais elle représente un défi ! Je vous déconseille de commencer ou de tester unity en réalisant un jeu moyen, il y a de forte chance de vous retrouver souvent bloqués et vu que les jeux moyens ont en général plus de contenu que les jeux faciles, vous risquez de vous décourager avant de l'avoir fini. Pour en revenir au début de ma phrase précédente, je trouve que les jeux que j'ai classé en niveau moyens sont les plus intéressants car le résultat est cool mais réalisable, la plupart des jeux que j'ai classé en difficile ne sont pas réalisables seul ou alors il faut beaucoup de temps et de compétences.

Le tower defence, c'est un jeu qui semble simple à créer mais on rencontre rapidement un bon nombre de mur. Le premier est la map, il faut bien la penser car les autres éléments vont interagir avec elle et souvent on finit par la refaire entièrement plus tard quand on rencontre trop de problèmes pour tous les contourner. Le deuxième point piège est le chemin, ça à l'air très simple à faire mais il arrive que l'on bug à cette étape, comment faire pour que les ennemis suivent le chemin dans la bonne direction ? Et si je fais une boucle est-ce qu'ils vont la suivre ou simplement aller au plus court sur la sortie...

Un autre point à soulever, vous allez devoir faire de l'interface ! Et oui par rapport au jeu précédent, il va vous falloir des menus pour choisir les tours, les évoluer, pouvoir les revendres ...

Dans un tower defence il y a aussi bien plus de contenu que dans les jeux au-dessus, plusieurs tours, leurs évolutions, les ennemis, les maps et toutes les statistiques qui vont avec cela ! Dans ce jeu il va y avoir beaucoup plus de mathématiques que dans les jeux "facile". Par exemple un tour qui tire en AoE sur un ennemi, il va falloir détecter s'il y a d'autres ennemis autour et peut-être en fonction de la distance modifier les dégâts appliqués.

Je pense que vous avez compris l'idée, les jeux moyens c'est un nouveau monde à explorer sur unity par rapport au précédent, sans plus tarder, voici une liste générale des choses à mettre en place :

  • Map (route, zones pour poser les tours, zones où l'on ne peut rien poser)

  • Interface (Tous les menus necéssaires dans le gameplay)

  • Les tours (Leurs statistiques, leurs spécificités (AoE, slow, poison ...), leurs évolutions ....)

  • Les ennemis (diversifié, spécificité (anti-slow, résistant à telle tour, AoE de protection ...), leurs statistiques (vitesse, pv ...))

Comment ? Uniquement quatre points ? Et oui au final il n'y a pas tant de "fonctionnalité" elles sont justes plus complexes à développer et surtout il y a une quantité de statistique et une diversité qui n'existe presque pas dans les autres jeux. Un mario avec que des goombas et des tortues ça reste sympa à jouer, un tower défence avec une seule tour qui n'évolue pas et un seul ennemi, c'est vite ennuyant. Cela va être un thème récurrent dans les jeux moyens et encore plus présent dans les jeux difficiles, nous allons avoir besoin de beaucoup de contenu avant même que le jeu devienne intéressant en version "basique", donc ça va être plus long à développer.

Les points possibles à améliorer :

Il n'y a pas grand-choses à dire ici, vous pouvez faire plus d'ennemis avec de nouvelles mécaniques comme des healer ou des tours avec du stun etc ... il n'y a pas d'amélioration globale, juste plus de contenu, plus de diversité et de possibilité.

Pour faire un Tower Defence voici quelques conseils :

  • Commencer simple, oui un TD avec une tour et un ennemi c'est ennuyeux, mais au moins vous avez développé une base ou tout fonctionne, il suffit d'ajouter du contenu après.

  • Pour le déplacement des ennemis sur le chemin vous pouvez faire un truc tout simple, le chemin à l'information de la direction à suivre (comme une "flèche") et l'ennemi regarde juste la direction donnée par la case puis se déplace d'une distance d'une case et recommence.

  • Utiliser les outils qui sont dans unity ! Par exemple pour un tir AoE d'une tour, il vous suffit de créer un CircleCollider2D au point d'impact pour récupérer facilement les ennemis toucher par le tir.

Danmaku / bullet hell

Le danmaku semble simple car il est semblable au Shoot 'em up et il n'y a pas tant de contenu à créer pour suivant que c'est un jeu moyen .... en quoi il est difficile à faire du coup ? La difficulté de ce jeu est pernicieuse, au début tout va bien et vous allez avancer très vite, mais quand vous allez ajouter des ennemis en grand nombre ou des gros patterns de balles, vous allez rencontrer ce terrible problème, la consommation de ressources. En effet, si vous attachez des colliders et surtout des rigidbody à toutes vos balles puis que vous en instanciez 300 ..... unity ne va pas du tout aimer ! Donc la difficulté de ce jeu est un point que l'on n'a jamais abordé avant pour ne pas se prendre la tête et qui est obligatoire maintenant, l'optimisation !

De plus, pour faire de jolie pattern de balles, il faut utiliser pas mal de math en général, c'est pas compliqué, juste long à mettre en place et à créer.

Voici une liste générale des choses à mettre en place :

  • Contrôle du vaisseau du joueur

  • Ennemis / Spawner / IA

  • Boss

  • Pattern des balles

  • Optimisation

Le danmaku demande beaucoup de temps car il n'est pas possible de faire des instanciations d'ennemis aléatoires. Vu que le but de ce genre de jeu est une grande difficulté, beaucoup de joueurs ont d'importantes attentes sur les patterns et autres, donc il faut faire tous les niveaux à la main, ce qui est très chronophage et oblige du coup à "créer du contenu" comme pour la plupart des jeux moyens.

Les axes d'amélioration sont semblables au Shoot 'em up, je vous les remets ici :

  • Des ennemis avec des patterns de mouvement et de tir plus diversifiés

  • Faire des boss complexes avec les patterns de déplacement et de tir, faire des conditions spécifiques pour piéger le joueur "s'il reste en bas à droite plus de 3 secondes, faire ceci".

  • Faire des bonus pour le joueur (un bouclier, des tirs en plus, vitesse max en plus, un boost pour esquiver ...)

Pour l'optimisation je vous conseille de vous renseigner sur les raycasts, ça consomme peu et on peut faire beaucoup de choses avec !

Versus fighting

Enfin les jeux de combats ! Combien de personnes ont essayé de se lancer dans un jeu de combat pour commencer .... sûrement beaucoup trop !

Effectivement quand on imagine le contenu du jeu on se dit, je ne crée que deux personnages et voilà il n'y a pas grand-chose à faire .... mais le problème du jeu de combat est le même que pour le jeu de voiture, c'est du feeling, de la sensation de gameplay et surtout un point que l'on n'a pas abordé plus que cela avant, de la précision dans les hitbox et des hitbox mobiles en fonction des actions du joueur. De plus, il faut un minimum de graphisme pour que le jeu soit sympa à jouer, donc vous allez devoir apprendre à créer / utiliser les sprites puis à les animer en jeu. Autant dire, beaucoup de travail en perspective ! Il y a aussi une partie toute nouvelle sur les contrôles si vous voulez faire des combinaisons de touches pour utiliser des attaques, et bien évidemment un peu d'interface pour afficher les PVs, le timer, la sélection des personnages, la sélection des maps, etc ...

Voici une liste générale des choses à mettre en place :

  • Interface menu (selection personnage et map)

  • Personnage avec les contrôles de base

  • Créer les sprites et les hitbox du personnage

  • Création des maps (taille, décors, interface pv, timer)

  • Contrôle plus poussé avec combinaison de touches

  • Bonus : Créer une IA capable de jouer avec un personnage

Peu de points, mais tous très longs à faire ! Quoi que le premier peut être fait assez vite. Au début je vous conseille fortement de faire des contrôles très simples tel qu'un coup léger et un coup fort puis attendre d'avoir un jeu en version de base avant de vous intéresser aux combinaisons de touches. La qualité graphique que vous recherchez peut vous prendre énormément de temps, si vous faite un jeu de combat pour le fun ou pour apprendre à utiliser unity, ne passez pas trop de temps sur ce point ou vous allez vous décourager avant de finir le jeu. De même pour l'IA, faite cela quand tout le reste est déjà fini.

Beat them all

Le Beat them all est proche du versus fighting, pour simplifier on pourrait même dire que c'est la même chose, mais que l'on joue contre des IA à la place de jouer contre un autre joueur. La diversité graphique est ici encore plus importante que dans le versus fighting et les IA doivent être diverses pour ne pas que le joueur trouve un pattern qui fonctionne sur 100% des ennemis du jeu (surtout que se battre indéfiniment contre la même personne ou avec la même stratégie devient vite pénible). Vous avez aussi une gestion de la camera qui va être différente du versus fighting car normalement vous évoluez dans un niveau complet. En parlant de niveau, il va vous falloir les créer aussi ! Encore du contenu supplémentaire à gérer. Je pense que vous comprenez pourquoi ce style de jeu est classé en difficile, en soit les contrôles du joueur peuvent être plus simples que pour le versus fighting, les IA sont aussi plus basiques et moins longues à créer mais il y a tellement de contenu qui touche tellement de domaines différents que le temps nécessaire pour réaliser une version basique de ce jeu est bien plus important que pour les autres au-dessus.

Voici une liste générale des choses à mettre en place :

  • Personnage avec les contrôles de base

  • Sprite pour le personnage et les ennemis

  • Création des maps

  • Gestion de la camera

  • IA des ennemis

Stratégie au tour par tour

Ce style de jeu est particulier car souvent il a des fonctionnalités plutôt uniques. Par exemple, le déplacement demande un algorithme unique qui est très peu présent sur internet et dans les tutoriels en tous genres, donc c'est à vous de le faire de A à Z. Ce genre de jeu demande aussi beaucoup de contenu car il y a souvent des équipements et c'est l'une des choses les plus chronophages à créer. Prenons un exemple simple, votre personnage à un casque, une armure, une arme et des chaussures. Si on veut faire un minimum de diversité dans le jeu on va créer un truc comme 30 objets de chaque catégorie, si vous prenez 1H pour penser, dessiner et implémenter l'objet (ce qui est très court) vous allez avoir besoin de 30 * 4 * 1H donc de 120 heures. En comptant 8H par jour, vous avez besoin de 15 jours juste pour faire les objets !

Les fonctionnalités de ciblage en zones, de déplacement, de hauteur sont suffisament spécifiques aussi donc pas ou peu d'aide là-dessus ...

Je déconseille fortement de se lancer dans ce style de jeu sans connaissance, un habitué d'unity peut arriver à s'en sortir mais pour un débutant c'est une suite de mur à passer avec presque aucune aide.

Stratégie en temps réel

Les jeux de stratégies en temps réel apportent un nouveau problème qui est énorme ... le réseau ! Par rapport à du jeu au tour par tour, il est impossible de jouer avec un autre humain sur le même PC. De plus, il y a aussi un problème de performance qui va s'imposer, du lag en tour par tour c'est pas grave, alors que du lag en temps réel, c'est très handicapant.

Les algorithmes sont différents du tour par tour et plus accessibles car il y a beaucoup plus d'informations dessus sur internet (car de très nombreux styles de jeux qui ont des similarités (MOBA, RTS, RPG ...)) je vous conseille d'utiliser l'algorithme A* pour les déplacements par exemple.

A moins d'avoir de solides connaissances sur la création de jeu en ligne sur unity, je déconseille très fortement d'essayer de créer un jeu de ce style.

Jeu de gestion

Je vais prendre pour exemple un jeu de gestion de parc d'attraction pour parler de ce style de jeu et de ses contraintes. En premier lieu, il faut énormément d'éléments de gameplay (les attractions, les décors, les files d'attente, les ventes de produits annexes, etc ...) beaucoup de sprites en perspective, il y a aussi de l'IA, les personnes qui viennent dans le parc, qui utilisent les attractions et qui consomment des produits. L'interface va être un point très important avec tous les menus de gestion et de construction, de plus la caméra est primordiale dans le confort du gameplay.

Tous ces points sont techniques et certains comme les éléments de gameplay nécessaires sont très chronophages. Si vous développez seul, je vous déconseille de vous lancer dans une telle aventure, il y a peu de chance qu'elle aboutisse et même si vous y arrivez ça va être très dur de tenir la comparaison avec les jeux du même style faits en studio, autant en terme de quantité d'élément et de fonctionnalité qu'en terme de qualité graphique.

Conclusion

Cet article avait pour but de vous montrer des styles de jeux accessibles à créer sur unity pour commencer sans trop de difficulté et en même temps rapidement comment évaluer un jeu, quels sont les points importants et vous faire partager mon expérience sur les bloquages que j'ai déjà rencontrés et qui sont invisibles aux premiers abords (comme les problèmes de performance, ou le feeling sur les jeux de voiture par exemple).

Quand vous voulez vous lancer dans un projet, prenez deux minutes, faite une liste et évaluez le travail à réaliser, ça aide à trouver par quoi commencer et parfois ça peut nous sauver d'un projet infinissable car on a visé trop haut !

Sources

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels