Tutoriel Complet Unity Défi 3 3.0 Présentation Objectif Ce que tu vas apprendre Méthodologie 3.1 Gravité, Collisions & Saut 3.2 Impose les règles de ton jeu 3.3 Caméra 3.4 Ajoute un ennemi 3.5 Tire des Saphirs Cosmik
3.0 Présentation Objectif Maintenant que l univers de jeu est super vivant avec des dialogues, des animations et des personnages qui bougent partout, on va voir comment pouvoir réellement y jouer : on va sauter, rajouter des collisions, perdre, tirer des missiles, et surtout gagner! Ce que tu vas apprendre Gérer la gravité dans Unity Faire des collisions Rajouter des ennemis Créer des clones) Gérer la caméra pour créer plusieurs niveaux Méthodologie Tu vas d abord commencer par gérer la gravité (faire tomber ton personnage), des collisions (pour qu il ne passe pas au travers du sol) et surtout du saut pour te déplacer dans ton jeu dans le [Tuto Gravité]. Ensuite, on va voir comment modifier les règles de ton jeu en faisant perdre & gagner le joueur dans le [Tuto impose tes règles] ; après cela on va créer un deuxième niveau et un défilement dans le [Tuto Caméra]. Enfin, on va voir comment rajouter des ennemis ainsi qu une mini IA dans le [Tuto Ennemi]. Pour finir en beauté, nous verrons comment créer des clones (pour tirer des missiles par exemple) dans le [Tuto tirer des missiles].
3.1 Gravité, Collisions & Saut Notre personnage est actuellement en train de voler, il est temps d activer la gravité! Pour l instant, notre personnage est juste une image que Unity affiche à l écran. On va donc devoir indiquer à Unity que c est un personnage physique qui doit obéir aux lois de la gravité. Pour cela, on va lui rajouter un Rigidbody, qui dit à Unity que notre personnage a une masse. Sélectionne ton personnage, clique sur Add Component rentre rigidbody dans la barre de recherche et clique sur le Rigidbody trouvé :
Maintenant le personnage tombe, mais il passe à travers le sol. Pour mon jeu de plateforme, j aimerais qu il tombe sur le sol. C est logique car le sol n est qu une image pour l instant, il va donc falloir indiquer à Unity que le sol est solide. On ne va pas lui rajouter un RigidBody car cela ferait tomber notre sol ; on va plutôt utiliser une BoxCollider : c est une boîte qui considère tout ce qu il y a à l intérieur comme étant de la matière et donc impossible à traverser. Notre joueur va également avoir besoin d une BoxCollider ; il est juste sujet à la gravité actuellement mais il ne pourra pas faire de collisions avec les autres objets (sols, ennemis ) Comme pour le Rigidbody, clique sur Add Component rentre box et clique sur Box Collider Dans ton composant Box Collider, clique sur cette icône qui va te permettre de modifier la taille de la Boite qui est un rectangle.
Maintenant, la box collider est visible et modifiable, pour la modifier il faut tirer sur les petits carré verts : Voilà notre personnage a sa boîte de collision, maintenant il faut en mettre sur le terrain. Pour cela, sélectionne le Sprite de ton premier terrain
Puis fait un clic droit > Create Empty Renomme ce nouvel objet en Plateforme 1 puis ajoute lui une box collider, met la au niveau du sol et le tour est joué!
Tu peux ensuite créer plusieurs objets Platforme, leur ajouter des box collider, et les placer sur les autres sols de ton jeu. Maintenant que tes collisions sont faites, ton personnage ne passera plus à travers le sol! Il ne nous reste plus qu à ajouter le saut pour pouvoir avancer dans notre niveau. On va donc voir comment faire sauter le personnage, pour cela ouvre le script de ton personnage. On va commencer par supprimer le code qui permettait de déplacer le personnage vers le haut et vers le bas, car on va remplacer cela par un saut : Ensuite je vais rajouter une variable qui va récupérer le Rigidbody de mon joueur :
Je vais ensuite dire Si j appuie sur une touche, alors va vers le haut, la gravité s occupera toute seule de faire descendre le personnage. Il est possible que la gravité soit trop ou pas assez forte, pour la modifier, clique sur Edit > Project Settings > Physics
Tu vas voir une fenêtre comme celle ci dessous apparaître dans ton Inspector. En modifiant le Y, tu modifies la vitesse à laquelle tes objets tombent. la valeur est toujours en dessous de 0, plus est dans les négatifs, plus les objets tombent vite, plus elle se rapproche de 0, plus ils tombent lentement.
On va modifier un peu notre Script car si tu regardes bien ton personnage ne peut pas sauter en diagonale, il saute toujours vers le haut. Ça c est parce qu on utilise la fonction Translate quand on appuie sur une flèche. Lorsque l on utilise de la physique sur un objet, il ne faut plus utiliser Translate mais la fonction MovePosition qui se trouve dans le Rigidbody. Voici les nouvelles fonctions utilisées :
3.2 Impose les règles de ton jeu Dans le [Tuto Gravité, Collision et Saut], on a fait sauter le personnage si on restait appuyé sur la touche espace, mais comment faire pour le faire sauter en appuyant une seule fois dessus? Et pour perdre si on tombe dans la lave? On va voir que ses deux choses sont liées. On va donc commencer par ouvrir le script du joueur et rajouter une variable booléen qu on va mettre à faux au début. Cette variable va avoir un but simple : Quand elle sera à vrai, le personnage pourra sauter, quand elle sera à faux, même si le joueur appuie sur la barre espace, le personnage ne sautera pas. On va ensuite rajouter la condition dans notre touche espace :
Maintenant il faut déterminer à quel moment le personnage peut sauter à nouveau. On va dire que c est quand il touche le sol. Nos objets qui ont la box collider correspondant au sol contiennent tous le nom Plateforme. En bas de notre script on va donc rajouter une fonction propre à Unity qui s appelle OnCollisionEnter. Voilà notre personnage va pouvoir sauter dès qu il retouche le sol! On va aussi utiliser la fonction inverse afin d'empêcher le personnage de sauter lorsqu il a quitté le sol, par exemple s il tombe d une plateforme sans avoir sauté :
Pour perdre le jeu, il faut d abord déterminer l évènement qui va le tuer, par exemple si il tombe dans la lave. Pour cela, je fais comme dans le [tuto Gravité, Collision et Saut] : ajouter des objets vides et leur rajouter des box collider, et je renomme mes objets vides de manière à ce qu ils contiennent tous Lave : Ensuite je vais pouvoir regarder dans le code si je touche un objet dont le nom contient Lave puis je fais perdre le joueur, moi je le téléporte mais tu peux lui enlever de la vie, lui faire perdre de la vitesse, voir même un Game Over!
3.3 Caméra pré requis : Tutoriel sur les règles de ton jeu Notre personnage peut maintenant parcourir librement l écran, mais comment déplacer la caméra afin d aller plus à droite ou même de passer au 2ème niveau? On va utiliser un script ; crée un nouveau Script et met le sur ta Camera. Dans ce script on va créer une variable pour le joueur, car on va le suivre et on va donc avoir besoin de lui! N oublie pas de Glisser et déposer ton joueur dans le Script On va ensuite mettre dans la fonction Update, la nouvelle position de la camera :
Et voilà la caméra suit le joueur, on va maintenant voir comment utiliser la caméra afin de passer à un deuxième niveau. Tout d abord, ajoute une box collider à l endroit ou ton niveau se termine par exemple ici : puis lorsque le joueur touche cette objet, téléporte le joueur et la caméra à une nouvelle position. On va faire cela dans le script du joueur (car c est lui qui va toucher cette BoxCollider) ; il faut donc penser à rajouter une variable pour notre caméra dans ce script :
3.4 Ajoute un ennemi Pour rajouter un ennemi, il faut comme pour le joueur, créer un objet dans la scène, lui ajouter un sprite, un animator, un rigidbody, une box collider. Une fois que tout ceci a été ajouté, on va lui créer un script, dans ce script on va créer et initialiser les variables dont on va avoir besoin : On va ensuite lui ajouter un déplacement aléatoire, pour cela on va utiliser la fonction Random.Range() qui va nous donner un nombre aléatoire entre les paramètres (des nombres entiers) :
On rajoute ensuite une condition dans la fonction Update() afin de voir si le monstre n a plus de vie, si c est le cas on le tue : On va ensuite déterminer quand le monstre doit attaquer, ici j utilise aussi Random.Range() afin de le faire attendre un temps aléatoire avant qu il attaque :
Il faut maintenant déterminer à quel moment le monstre peut taper le joueur, je vais donc mettre cette variable à true quand la box collider touche celle du joueur et mettre à false quand elle sort :
Il faut faire la même chose dans le Script du joueur, et ne pas oublié d enlever de la vie au monstre si on le touche
3.5 Tire des Saphirs Cosmik On va voir ici comment tirer un missile avec des clones. Pour cela, on va récupérer l objet que l on veut tirer (ou cloner). On va créer un clone quand on appuie sur la touche entrée : Pour l instant notre clone ne bouge pas, il faut donc lui ajouter un script pour le déplacement : Je voudrais maintenant créer des clones un par un, pour cela je retourne dans mon script joueur afin d ajouter un temps d attente avec une coroutine et en utilisant un booléen comme on l a vu auparavant (par exemple avec le temps d attaque de l ennemi) :
Lorsqu on crée des objets de cette manière, il est important de les détruire afin que la scène n en soit pas rempli, pour cela je vais utiliser la fonction Destroy :