Cours 2¶
Activités sociales¶
Commencer un jeu¶

D'abord, on doit déterminer ce qu'on veut faire avec une planification structurée (on y reviendra un peu plus tard dans la session).
Ensuite, on embarque dans Unity pour faire un mini-prototype. Le but ici est de tester notre boucle de jeu (game loop).
Aujourd'hui, on va passer directement au prototypage. Cela permettra deux choses. D'abord, ça nous familiarisera avec le moteur Unity et de nous donner une certaine confiance pour la suite. Ensuite, ça devrait justifier l'importance de l'étape que nous venons d'omettre 😈
GitHub¶

Les projets Unity peuvent s'enregistrer sur GitHub. C'est même recommandé de le faire ! Comme ça, pas besoin de trainer de disque dur.
Première chose à faire, se connecter à GitHub !
Ajouter un nouveau projet Unity¶
Dans Unity Hub,
- Dans Projects, cliquez sur « + New Project »
- Sélectionnez la version 6 de Unity
- Cliquer sur « Universal 3D » (URP)
- Choisir un nouveau nom (Project name). Exemple :
Protolude - Choisir l'emplacement (Location)
- Au collège, dans le dossier
Documents/Code_Unityidéalement
- Au collège, dans le dossier
Là, il y a deux méthodes pour connecter Unity à Github.
Méthode 1 : Source control provider¶

Avant de créer le projet, on créer une passerelle avec GitHub
- Choisir GitHub

- Cliquer sur « Get a token »

- Confirmer l'accès

- Cliquer sur Generate token

- Copier le token d'accès dans votre presse papier

- Retourner sur Unity Hub
- Entrer le token d'acccès et cliquer sur Authorize

- Enfin, cliquer sur « + Create project »
- Ouvrir l'application GitHub Desktop
- Cliquer sur
File > Add local repository - Choisir le chemin vers le projet créé et cliquer sur « Add repository »
- La fenêtre "Initialize Git LFS" devrait apparaitre. Cliquer sur Initialize Git LFS

- Cliquer sur « Publish branch »

Méthode 2 : À l'ancienne 👵¶

- Cliquer sur « + Create project » (sans choisir de source control provider)
- Ouvrir l'application GitHub Desktop
- Cliquer sur
File > Add local repository - Choisir le chemin vers le projet créé et cliquer sur « Add repository »
- Une erreur devrait apparaitre. Cliquer sur le lien « create a repository »

- La fenêtre « Create a new repository » apparait :
- Vérifier que le nom est correct
- Ne touchez pas au chemin, il devrait être normalement bien configuré
- Ajouter une courte description
- Cocher "Initialize this repository with a README"
- Sélectionner Unity dans la liste de "Git ignore"
- Vous pouvez mettre MIT License pour la "License"

- Cliquer sur « Create repository »
- La fenêtre « Publish repository » apparait.
- Décocher « Keep this code private »
- Cliquer sur « Publish repository »

À faire juste une fois par projet
Travailler avec GitHub¶

La version officielle de votre projet est maintenant celle qui se trouve sur GitHub !
Ctrl+S n'est plus suffisant. À partir de maintenant, pour sauvegarder un projet, il sera essentiel d'effectuer un commit + push. Sinon ça revient à ne pas le sauvegarder du tout.
Si vous voulez travailler sur un autre ordinateur, il faut juste cloner le projet avant de l'ouvrir avec Unity.
Si vous voulez travailler sur un ordinateur qui a deja un clone, mais que la version sur github est plus récente, n'oubliez pas de faire un pull !
Voilà !
Structure de dossiers¶

À chaque nouveau projet, il sera important de bien classer ses fichiers. Voici la structure recommandée pour le cours :
📁 Assets
├── 📁 _
│ ├── 📁 Animations
│ ├── 📁 Audio
│ ├── 📁 Fonts
│ ├── 📁 Materials
│ ├── 📁 Prefabs ⭐️ Utile aujourd'hui même
│ ├── 📁 Scenes 💅 Déplacé ici !
│ └── 📁 Scripts
└── ...
Par défaut
Structure ajustée
Dossier Scenes à déplacer
Dans un nouveau projet, le dossier « 📁 Scenes » existe déjà à la racine du dossier « 📁 Assets ». Vous pouvez simplement le déplacer dans votre structure de dossier.
Asset store
Tout ce qui sera importé d'ailleur se positionnera normalement à la racine du dossier « 📁 Assets ». Il sera important de les laisser à cet endroit pour éviter des problèmes plus tard.
Pourquoi _ ?
Séparer les éléments personnalisés du reste.
Le «_» affichera le dossier en premier sous « 📁 Assets ».
GitHub
Notez que les dossiers vides ne sont pas enregistrés dans git.
Démo¶

Mise en place¶
-
Modifier la structure de fichiers
-
Ajoutez un cube et renommer le « Plancher »
- Repositionnez le cube au centre de la scène (x=0, y=0, x=0)
-
L'aplatissez le pour faire une plateforme (x=10, y=0.1, x=10)
-
Ajouter un autre cube et renommer le « Pente »
- Changer sa dimension/position/échelle pour créer une pente qui donne vers le plancher
Gizmo
Pour voir la caméra et autres éléments importants, activez les options :
, puis affichez les Gizmos 
Notez qu'on voit maintenant la caméra et la lumière directionnelle (soleil)
Raccourci : F (zoom sur un objet)
Positionner un élément sur une surface
Quand on glisse un élément du panneau Project sur la scène, vous verrez que celui-ci se positionne SUR les surfaces.
Ensuite, le repositionnement ne suit plus cette logique. Sauf si on utilise le raccourci : Ctrl+Shift + drag.
Physique¶

-
Noter la notion de collider sur le « Plancher »
Un collider est une carapace invisible qui permet au moteur physique de Unity de détecter les collisions et d'empêcher les objets de se traverser.
- Ajouter une sphère en haut de la pente
- Play

-
Stop
Attention au mode Play
Lorsque vous effectuez des modifications en mode Play, sachez qu'elles sont temporaire et qu'elles disparaîtront après le Stop.
RigidBody¶
- Ajouter un RigidBody à la sphere via
Add Componentdans le panneau InspectorRigidbody, ça ajoute une masse à un objet et par défaut, ça applique la gravité.
- Play
- Stop
Collider¶
C'est cool les Colliders, mais c'est avec des Rigidbody qu'on en voit l'utilité.
Selon la forme des objets, les colliders changent. Par défaut, une sphère a un collider sphérique.
Pour le fun :
- Désactiver Sphere Collider de la sphère
- Ajouter un Box Collider via
Add Component - Play
- Stop
- Remet le Sphere Collider pour la suite
Mesh Renderer¶

Le Mesh Renderer c'est l'enveloppe, le manteau de la forme. C'est ce qu'on voit au final. Ça utilise ce qu'on appelle un shader pour afficher une surface, mais bon, on y reviendra une fois.
Pourquoi on désactiverait ça ?
Super utile !
On veut parfois limiter le déplacement d'un personnage sans l'afficher explicitement.
Par exemple, une fin de map, ou encore, un pont quand on ne veut pas que le personnage tombe sur les côtés, ce genre de chose.
Ôte-toi de mon soleil !
- Diogène
Mesh Filter¶

Finalement, le Mesh Filter c'est le squelette géométrique (juste des points et des polygones). C'est un peu l'équivalent des vecteurs d'une image vectorielle.

Exercice - Unity
Isaac Newton
Action / réaction¶

La base d'une jeu vidéo c'est d'effectuer une action et que cette action a une répercussion. En Web, le classique c'est le lien ou le bouton. On click et il se passe quelque chose.
En jeu vidéo, il y a ça et plus encore. Quand on contrôle un personnage, celui ci interagit avec son environnement. Que ce soit lorsqu'il tire un ennemi ou lorsqu'il tombe dans un trou, une réaction se produit.
En Unity, on parle surtout de collision. Quand le projectif entre en collision avec l'ennemie ou quand le personne tombe dans le trou, il entre en collision avec le trou, il se passe telle ou telle chose.
Collider Event System (CES)¶

Pour faciliter la gestion des événements liés à des collisions, installons le package Collider Event System.
Dans le panneau Project, glissez un prefab du package sur la scène.
Ex : Packages > Collider Event System > Prefabs > Trigger Cube
- Positionnez le à l'endroit où vous voulez effectuer une détection de collision.
- Dans le panneau Inspector, sous Collider Event, on peut ajouter un comportement lorsqu'une collision est détectée dans la section Actions :

Les actions possibles sont les suivantes :
| Action | Effet |
|---|---|
| Animation | Déclenche une animation |
| Audio | Lecture d'une piste audio |
| GameObject | Affiche, cache ou détruit un objet. |
| Instantiate Prefab | Fait apparaitre un prefab |
| Invoke Events | Permet de déclencher un script custom |
| Material | Change l'apparence d'un objet |
| Rigidbody | Retire ou applique la physique sur un objet |
| Scene | Change de scène |
| Transform | Modifie la position, rotation ou l'échelle d'un objet |
| Variable | Assigne une valeur à une variable |
Changer l'affichage d'un objet avec CES¶

Pour activer ou désactiver manuellement un objet dans Unity, on doit simplement cocher ou décocher la case à cocher dans le panneau Inspector.

Toutefois, il est également possible de le faire dynamiquement en programmation, ou avec « Collider Event System ». Voici la marche à suivre pour cette dernière :
- Ajouter un prefab du « Collider Event System » sur la scène, de sorte à ce qu'il puisse entrer en collision avec une sphère qui roule.
- Dans le panneau Inspector, sous Collider Event, sous Actions, ajouter « Game Object »
- Target mode : Specific object
- Target : Glisser depuis le panneau Hierarchy un des GameObjects (ex: le plancher)
- Operation : laisser à Disable


Téléporter un objet avec CES¶

- Ajouter un prefab du « Collider Event System » sur la scène, de sorte à ce qu'il puisse entrer en collision avec une sphère qui roule.
- Dans le panneau Inspector, sous Collider Event, sous Actions, ajouter « Transform »
- Target mode : Entering Objects (les éléments qui entrent en collision avec le CES)
- Value Source : Fixed Value
- Cocher Position et spécifier des valeurs
Changer la rotation d'un objet avec CES¶
- Ajouter un prefab du « Collider Event System » sur la scène, de sorte à ce qu'il puisse entrer en collision avec une sphère qui roule.
- Dans le panneau Inspector, sous Collider Event, sous Actions, ajouter « Transform »
- Target mode : Specific object
- Target : Glisser depuis le panneau Hierarchy un des GameObjects (ex: Pente)
- Value Source : Fixed Value
- Cocher Rotation et spécifier des valeurs
- Cocher Animate
- Duration (en secondes) : 3

Exercice - Unity
Boucle là !
Prefab¶

Un prefab c'est un objet ou un groupe d'objets qu'on enregistre pour le réutiliser. C'est un modèle sur lequel toutes les copies vont garder une référence.
Le bonhomme de neige¶
1 bonhomme de neige c'est facile à faire. 3 sphères et hop, c'est fait.
Admettons que je veuille ajouter 10 bonhommes de neige dans mon jeu. Je pourrais le dupliquer 10 fois, mais pas l'idéal. Si ensuite je veux ajouter une carotte pour le nez, je dois le faire pour les 10 ! Il faudrait avoir à le faire une seule fois pour tous les bonhommes. Ça, ça s'appelle faire un prefab.
- Crééer un gameobject vide, nomme le « bonhomme de neige » et y mettre les 3 sphères.

- Glisser « bonhomme de neige » dans le panneau Project dans le dossier prefab que vous devirez déjà avoir si vous avez bien fait votre structure de dossiers ;)
- Supprimer « bonhomme de neige » du panneau Hierarchy
- Glisser le prefab « bonhomme de neige » sur la scène (on reconnait le prefab par un cube turquoise)

- Dubliquer le prefab et repositionnez le, 10 fois

Testons l'avantage d'utiliser des prefabs. Ajoutons une carotte pour le nez.
- Dans le panneau Project, double-clic sur le prefab « bonhomme de neige »

- Ajouter une carotte pour le nez

- Sauvegarder et revenir de l'édition en cliquant sur la petite flèche dans le panneau hierarchy

Détacher un prefab¶
Pour détacher un prefab, clic-droit sur l'objet dans le panneau Hierarchy, puis Prefab > Unpack Completely.
Il n'y aura plus de référence au prefab, donc si on change le prefab, ca ne changera plus cet élément.
SyntyStudio¶

L'avantage du pack est qu'il contient des centaines de modèles 3D cohérents entre eux. Visuellement, c'est plus sérieux que d'avoir plusieurs assets qui ne partagent pas le même esthétique.
J'ai pas encore mon compte éducationnel
Si vous ne l'avez pas encore 🤨 vous pouvez le télécharger ici , mais cette solution doit être temporaire.
Conversion nécessaire¶

Bon, là, si vous ajoutez tout de suite des assets de « SyntyStudio » vous devriez faire face à un problème de Shaders incompatibles. Quand ça arrive, Unity affiche les assets en magenta.
Pas de panique, ça veut juste dire que l'asset utilise un shader qui n'est pas reconnu par la technologie URP (ce sur quoi notre projet est basé). Il faut donc convertir le pack avant de pouvoir l'utiliser :
- Clic sur
Window>Rendering>Render Pipeline Converter. - Source Pipeline =
Built-in - Target Pipeline =
Universal Render Pipeline (Universal Renderer) - Coche « Material Reference Converter » et « Material Shader Converter ».
- Clic sur le bouton
Scan. - Quand c'est terminé, clic sur
Convert Assets.
Là, ça fonctionne !

Prototype
Certains materials peuvent être encore brisés. C'est parce que SyntyStudio utilise parfois des shaders personnalisés. Pour corriger cela, dans le panneau Project, tapez "URP_ExtractMe" dans la barre de recherche. Double-cliquez dessus sur l'élément trouvé, puis cliquez sur Import.
Erreur d'inattention
Si vous avez convertis en Universal Render Pipeline (2D Renderer), vous devez soit recommencer, soit appliquer la procédure suivante.
- Créer un dossier « Editor » dans Assets.
- Télécharger et déplacer dans le dossier Editor le script de récupération.
- Sur Unity, vous devriez voir l'onglet "Tools". Cliquer sur
URP>3. Convertir vers URP Lit (tout le projet)
Idée originale de Christophe Granger.
Ajouter des assets sur la scène¶
- Dans le panneau Project, ouvre le dossier
SyntyStudios>PolygonAdventure>Prefabs>Environments - Glissez par exemple,
SM_Env_Road_Straight_01sur le panneau Scene. - Repositionnez le prefab au centre de l'environnement (
x=0,y=0etz=0).
Mesh Collider vs Box Collider¶


Moins le collider est complexe, plus le jeu est performant
Certains modèles 3D incluent par défaut un Mesh Collider. Si son utilisation est pertinente pour des surfaces complexes (comme un terrain) on garde, mais souvent ce n'est pas pertinent.
Mesh Collider est très gourmand en ressources, car le processeur doit calculer les collisions pour chaque polygone.
Devoirs¶
Vérification du devoir 01 (2 %)

Devoir - Unity
Protolude : Partie 1