
-
Voir la partie 2 du projet ici : [Projet Perso] Je fais un RPG ! (Partie 2)
Voir la partie 3 du projet ici : [Projet Perso] Je fais un RPG ! (Partie 3)
Coucou les gens !
J’espère que vous allez bien ! Et oui déjà un article ! Comme actuellement je passe à peu près 50% de mon temps libre en recherche d’emploi et les 50 autres % à me former sur le moteur de jeu Unity je me suis dit que j’allais vous faire partager mon expérience dans cette formidable galère ! ce PROJEEEEEEET ! De plus vous en parler me donnera la pression nécessaire qui me motivera à le concrétiser haha.

Bref après cette magnifique page de pub, je vais donc vous parler de mon projet.
I / Introduction :
Tout d’abord il faut savoir que je fais pas mal de formations en ligne grâce au site Udemy.com, un site qui permet moyennant finance de se former dans à peu près tous les domaines possibles que ce soit en Design, Musique, Marketing, Photographie, Mode de Vie (whatever it means) ou bien encore en Développement. Et plus particulièrement, ce qui m’intéresse, c’est à dire la programmation de jeux 🙂 !
Les prix des formations varient entre une dizaine de brouzoufs et 200/300€ (voire plus). Ca peut paraître cher, mais les formations proposées sur le site (en tout cas toutes celles que j’ai eu l’occasion de faire) sont faites par des professeurs très pédagogues qui enseignent ce qu’ils font avec plaisir (paf, le tacle à la Fac qui passe discrétos), ils fournissent aussi généralement tous les assets des projets/formations (qui parfois couteraient 10 fois plus chers à acquérir autrement) et n’oublient pas de mentionner à quel type de personnes s’adressent le contenu des cours (genre, c’est bien écrit débutant / intermédiaire / confirmé avant que vous preniez le cours donc si vous y comprenez rien vous ne pouvez que vous en prendre à vous-même !). D’autant plus que le site propose TRÈS RÉGULIÈREMENT des grosses soldes à plus de 80/90% de réductions donc n’hésitez pas à y jeter un œil ça pourra surement vous intéresser !
En tout cas moi je sais que je craque régulièrement sur telle ou telles formations :).
Bref ! Tout ça pour dire que j’effectue actuellement une formation proposée par AwesomeTuts.com (et que vous pouvez retrouver ici :
https://www.udemy.com/create-your-first-rpg-and-fps-multiplayer-game-in-unity/learn/v4/overview )
Et que dans cette formation, il y a entre autres la création d’un jeu de rôle (RPG = Role Playing Game) en 3D !
Bon, vous emballez pas, je vais pas devenir le prochain CD Projekt RED (dévs de The Witcher) ou Blizzard (WoW) à moi tout seul x’) ! L’objectif c’est de comprendre comment utiliser le moteur de jeu Unity pour réussir à faire un prototype d’un tel jeu en un temps relativement court et avec tous les assets déjà fournis (c’est ce qui prend généralement le plus de temps à faire x’) ).
Par prototype j’entend que les plus grandes mécaniques de gameplay qui font un genre de jeu-vidéo doivent se retrouver dans le projet et tant pis si c’est pas fignolé à 100% vu que le but c’est que je sois polyvalent en dév de jeux (sous Unity at least) et que j’apprenne à rapidement sortir un truc jouable peu importe le genre (dans le cas où je referais une game jam par exemple).
Et là vous vous demandez : « Mais Batora, ça te sers à quoi de refaire un jeu déjà fait ? ».
Et bien Billy, déjà parce que tel un forgeron, c’est en programmant que l’on devient programmeur. Or les techniques explicitées dans ce cours, sont aussi utiles dans des projets de jeux aux genres parfois bien différents. Donc faire cette formation me permet de les apprendre.
Mais aussi parce que le projet étant un peu « vierge » d’intérêts : pas de quêtes, pas de possibilité de parler à des pnj, pas moyen de marchander/truander, pas de dragons ;)… et bien je peux utiliser ce projet comme template pour programmer des petites features cools qui peuvent faire la différence entre un jeu moyen et un bon jeu :).
D’autant plus, je compte vous partager le résultat de mon labeur une fois que je le jugerais assez avancé et cela vous donnera un peu un ordre d’idée du boulot que ça demande de bosser sur un jeu-vidéo 😉 En sachant que même si j’ais déjà les assets, ça ne veut pas dire que je me tournerais les pouces pour autant, vu qu’il faut que je code toute la logique de gameplay derrière tout le jeu :).
II / Présentation du projet (Pitch + Screenshots):
Pour la v0, le prototype correspondra à l’exacte copie de la formation que je suis, je ferais un autre post une fois la v0 finie pour me rajouter des features à faire pour en faire un « vrai » jeu :).
Brefouille : Le proto/jeu se présentera comme suit :
Après un menu de jeu dans lequel le joueur pourra choisir s’il souhaite jouer/ quitter/ aller dans les options, le joueur sera redirigé vers cette fenêtre de choix de personnages (cf image ci-dessous) s’il souhaite commencer une partie :

Une fois sur cette fenêtre, le joueur pourra choisir de créer un nouveau personnage (façon WoW ou Divinity : Original Sins), de supprimer un personnage déjà existant ou bien simplement de commencer le jeu avec le personnage sélectionné (à noter que le joueur pourra aussi revenir au menu principal).

Petit flashback avant de poursuivre : Voici un screen qui détaille ce que proposeront les options dans le menu principal : vous pourrez choisir votre résolution, retirer les ombres du jeu et choisir la qualité des graphismes pour pouvoir jouer sur votre toaster préféré !

Une fois le jeu lancé, le joueur se retrouvera dans un village qui lui servira de HUB pour aller dans différentes zones depuis une tour en bordure du village.

Le joueur pourra choisir d’aller dans 3 autres mondes (en plus du village) qui lui permettront d’affronter des ennemis distincts à chaque zone. Le joueur aura aussi la possibilité d’utiliser des armes différentes (avec le skin + dégats qui changeront en temps réel une fois l’arme sélectionnée) et de faire des combos de coups.

Le Village présent dans le HUB aura des PNJ qui marcheront selon un comportement défini (IA que je devrais coder), mais à part ça il n’y a pas d’interactions avec eux qui sont prévus dans le proto/v0, ce qui me permettra d’améliorer ça avec des features pour la v1.0 (genre avoir un PNJ marchand qui vendra des potions au joueur, un autre qui donnera une quête, etc…).
Voilà, c’est à peu près tout pour le pitch + présentation des screenshots du formateur que je peux vous montrer pour le moment.
Il faut savoir que j’ai déjà à ma disposition tous les assets que vous avez vus sur cette page, ce qu’il me « reste » à faire c’est donc faire en sorte de tout programmer pour faire le lien entre tous ces éléments 🙂 et ça va pas se faire en un coup de cuillère à pot, y compris avec le prof / les cours juste à portée de regard ^^.
Parce que des fois, on se retrouve avec des bugs très étranges 😛 …
III / Partie 1 – Le début de la programmation, premiers succès et premières galères !
(Langage technique inside, je vais essayer de simplifier au max mais si vous êtes frileux tant pis pour vous – prenez un pull -, pour les autres accrochez-vous et bon courage ^^):
Plop, voici donc mon premier compte-rendu sur ma première journée de dev sur le projet. Les imports d’assets se déroulent sans accrocs (plus de 45 minutes pour importer près de 7Go d’assets, ça fait mal aux fesses quand même x’) ).
Je crée une scène avec Unity qui me permettra de tout bien tester avant de commencer à faire les maps des différentes zones en plaçant les ennemis/PNJ dessus, son nom ? TESTER… ouais je sais tu peux pas test mon inspiration pour les noms haha.
Mon premier objectif : créer un personnage joueur qui peut se déplacer et être suivi par la caméra.

Je commence donc par créer un cube qui sert de sol au personnage. Puis je met l’asset (le prefab) du Knight Warrior, qui me servira de patron de conception pour tester mes scripts C#.
J’en profite pour créer 2 répertoires de Script : PlayerScripts et CameraScripts.
Puis je crée 2 nouveaux scrips C# dans PlayerScripts :
- MovementMotor qui contient toute la logique derrière les déplacements du joueur ainsi que de s’assurer que le joueur puisse sauter uniquement une fois.
- et CharacterMovement qui lui récupère une référence à MovementMotor et va s’occuper de gérer les animations de déplacement et d’attaques du personnage.
Puis je relie les scripts au prefab dans le panneau Hierarchy.

Bon okay, la première version ressemble à ce qu’on voit sur le gif plus haut, pas d’animations et pas de suivi de caméra c’est pas trop la folie mais c’est un début !
Par la suite je fais en sorte que mon code récupère les animations du personnage déjà implémentées dans l’asset que j’ai récupéré (parce que bon, les animations c’est loooooooong à faire et un peu barbant ma foi).

Et on arrive au résultat plus haut, évidemment j’ai aussi écrit et rajouté un script pour que la caméra suive le personnage, puis aprèèèès un gros moment à se prendre la tête pour comprendre comment faire une caméra en orbite (camera orbit)
cela permet donc d’avoir une caméra qui suis le personnage fixée en orbite autour de lui et de tourner de manière très « smooth » autour du personnage grâce à des interpolations sphériques linéaires (#jeMlaPeteAvecDesMotsDeMatheuProutProut, mais moi je préfère quand même dire Slerp :D).
Pour comprendre un peu comment faire, en plus des explications de Fahir le formateur de AwesomeTuts, j’ai aussi consulté ces liens:
- http://wiki.unity3d.com/index.php/SphericalCoordinates
- https://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/
Grosso modo pour expliquer comment ça marche (et m’assurer d’avoir bien compris aussi haha) :
- Plutôt que d’utiliser des coordonnées cartésiennes
- on utilise des coordonnées sphériques. Pour cela j’ai créé une struct qui fonctionne globalement comme un Vecteur à 3 dimensions, sauf que la particularité c’est qu’elle calcule d’elle même les angles trigo des valeurs (x, y ,z) qu’on passe en paramètres dans la struct (qui sont renommés Azimuth, Zenith et Longueur).
Une fois l’Orbit Camera rajoutée, j’ai aussi ajouté un script assez simple qui détecte l’utilisation de la roulette de souris chez le joueur et zoom/dézoom (sur une distance comprise entre un min / max, histoire de pas dézoomer à l’infini ni trop zoomer obviously).

Donc ça, c’était ce qui fonctionnait bien. Malheureusement, une fois les animations de déplacement effectuées, c’est avec les animations d’attaques que j’ai commencé à avoir du mal.
Mais pourquoi donc ? Me dites vous.
Et bien c’est « simple » Bobby, les assets que l’on m’a fourni possèdent déjà des animations, mais dans le cas de celles d’attaques il fallait que je réutilise celle d’un autre asset. Et voilà le résultat que j’ai eu après avoir appliqué le code expliqué par la formation :

DERP. (cela se produit en cliquant avec la souris)

Donc voilà, grosso modo l’asset étant un peu « cassé » (les liens d’animations sont cassés pour cet asset) du coup je suis dans le caca pour le moment avec les animations d’attaque.
J’ai fait remonter l’erreur au prof et j’espère qu’il pourra me débloquer sans que j’ai à cheater en récupérant l’asset du projet fini (ça serait de la triche imo :/).
A part ça côté code, tout m’a l’air bon, mais tant que les anims sont cassées c’est compliqué de tester.
Voili, voilou, c’est « tout » pour aujourd’hui, j’espère que ça vous aura diverti/plu.
Prochain article quand j’aurais réussi à me débloquer et avancer un peu plus sur le projet (ofc) ! 🙂
-
Voir la partie 2 du projet ici : [Projet Perso] Je fais un RPG ! (Partie 2)
Voir la partie 3 du projet ici : [Projet Perso] Je fais un RPG ! (Partie 3)
C’est un chouette article pour savoir comment on fait un jeu dis ! Allez, on est tous avec toi, you can do it !
J’aimeAimé par 1 personne
Merci :3 J’ai déjà réussi à trouver une solution à mon problème haha ! Du coup je vais avancer rapidement sur le projet et vous montrer mon avancement ! 😀 Le prochain article devrait arriver d’ici demain :3
J’aimeAimé par 1 personne