Ressources Magic Makers

 

Site en maintenance

 
Nous sommes actuellement entrain de mettre à jour les ressources de ce site.
Pendant la mise à jour vous pouvez retrouver tous les nouveaux contenus sur le site
 

https://lp-magicmakers.fr/

 
 

UNITY - Tirer

Les différentes étapes

Les mécaniques de tirs reposent sur différents outils qui peuvent être utilisés dans diverses situations. 

On va voir comment faire apparaître un nouvel objet, ce qui peut-être utile pour tirer des balles, récupérer des objets d’un inventaire, créer des explosions avec des particules… mais aussi comment utiliser le système d’input pour récupérer les actions du joueur, ou accéder à d’autres composants.

Pour cela nous allons :

    1. créer le modèle de notre balle : le Prefab
    2. comprendre et utiliser le système d’input
    3. faire apparaître la balle dans le jeu.

Créer une balle

Utiliser un Préfab

Pour tirer des balles on a besoin d’un modèle de balle qu’on peut créer quand on veut et où l’on veut. Pour cela on va utiliser un Prefab, c’est-à-dire un objet préfabriqué.

On commence par créer notre objet dans la hiérarchie. Puis on va venir le déplacer dans l’onglet projet. Cela crée un objet dans l’onglet projet et l’objet dans la hiérarchie devient bleu.

On a désormais un prefab !

On peut supprimer la balle de notre hiérarchie et lorsqu’on voudra la modifier on pourra y accéder directement depuis l’onglet projet.

Remarques sur les Prefabs

  • Il est intéressant de créer un dossier prefab pour ranger nos prefab (clic-droit dans Projet > Create > Folder). 
  • Créer des préfabs est aussi super utile lorsque l’on a plusieurs objets identiques pour pouvoir les modifier tous d’un seul coup plutôt que devoir les dupliquer à chaque fois.

Comment on tire ?

Récupérer un input

Pour tirer, on veut savoir si le joueur a appuyé quelque part (une touche, la souris… ) on utilise le système d’input qui permet de récupérer un clic de la souris ou une pression sur une touche du clavier.

Input à la souris

Généralement, on utilise la fonction Input.GetMouseButtonDown() qui retourne vrai au moment où l’on appuie sur le bouton. Entre parenthèse, on indique quel clic on veut récupérer :

  • 0 pour le clic gauche
  • 1 pour le clic droit
  • 2 pour le clic molette

Il existe également les fonctions : 

  • Input.GetMouseButton() qui retourne vrai tant que le bouton est pressé
  • Input.GetMouseButtonUp() qui retourne vrai au moment où le bouton est relâché.

Input au clavier

Généralement, on utilise la fonction Input.GetKeyDown() qui retourne vrai au moment où l’on appuie sur la touche. Entre parenthèses, on indique quelle touche on veut récupérer. Pour cela on peut :

Soit utiliser directement KeyCode.K avec le nom de la touche

Soit utiliser l’Input Manager pour récupérer les touches choisies dans l’interface Unity

Pour utiliser l’Input Manager il suffit d’aller dans Edit > Project Settings puis choisir les touches pour chacune des actions dans cette interface.

En plus de la fonction Input.GetKeyDown(), il existe également les fonctions :

  • Input.GetKey() qui retourne vrai tant que la touche est pressée
  • Input.GetKeyUp() qui retourne vrai au moment où la touche est relâchée.

Étape 1 : Faire apparaître la balle

Instantiate

Pour créer un nouvel objet, nous aurons besoin de deux choses :

  • l’objet à créer
  • la position ou l’on veut créer l’objet (et sa rotation)

On crée donc une variable publique pour récupérer le Prefab

Puis, quand le joueur tire, on utilise la fonction Instantiate() qui prend en paramètre l’objet à créer, puis la position et la rotation où le faire apparaître. Pour la position et la rotation on récupère celles de l’objet sur lequel on met notre script via son transform.

Dans l’état actuel, quand on tire, une balle apparaît mais celle-ci ne bouge pas.

Étape 2 : Faire bouger la balle

Rigidbody, GetComponent et TransformDirection

Pour faire bouger la balle, on va lui appliquer une force. Avant tout, il faut ouvrir le prefab et lui ajouter un RigidBody.

Sur le composant Rigidbody on va également enlever la gravité pour éviter que la balle tombe en décochant la case use gravity.

Si tu souhaites que la balle tombe, tu peux laisser la gravité, mais ce n’est généralement pas l’effet souhaité. Dans ce cas, tu peux modifier cette valeur comme tu veux.

Ensuite on peut revenir au code et récupérer la balle que l’on vient de créer pour lui donner une vitesse. On crée une variable pour récupérer le résultat de la fonction Instantiate()

Puis on récupère le RigidBody de notre objet et on lui change sa vitesse.

Pour récupérer le RigidBody on utilise la fonction GetComponent<>() qui permet de récupérer un autre composant de notre objet. Entre <> on précise le type du composant qu’on veut récupérer.

Pour changer la vitesse, on va modifier la velocity du Rigidbody

Pour cela on utilise la fonction transform.TransformDirection() pour récupérer la direction dans laquelle la balle doit partir, et le vecteur forward pour aller tout droit dans cette direction.

Enfin on peut gérer la vitesse de la balle avec une variable publique et multiplier la velocity par cette vitesse :

Avec ce script on est désormais capable de tirer des balles dans la direction où l’on regarde.

Attention : si l’on met ce script sur le joueur, le tir se fait en ligne droite. Pour gérer la hauteur, il faudrait prendre en compte l’inclinaison de la caméra et pas uniquement l’orientation du joueur.

Étape 3 : Détruire un ennemi et notre balle

Destroy, OnTriggerEnter

On va créer un deuxième script pour notre balle

Ce script, beaucoup plus simple, va nous permettre de détruire automatiquement la balle au bout d’un certain temps pour éviter d’avoir des balles qui trainent partout au loin et détruire la balle et l’ennemi si elle touche un ennemi. Ce script utilise beaucoup de mécaniques de collision

Deux choses à faire :

  • Quand l’objet est créé on dit qu’au bout d’un certain temps il se détruit automatiquement
  • Quand l’objet rentre en collision avec quelque chose si c’est un ennemi, il le détruit, puis dans tous les cas la balle se détruit.

Personnaliser le tir

Pour aller plus loin sur le tir voici quelques idées:

    • Pour faire un tir ennemi, on utilisera un timer pour tirer toutes les X secondes. Regarder la fonction InvokeRepeating qui est utilisée pour faire apparaître un objet régulièrement
    • Pour faire des dégâts et ne pas détruire immédiatement on peut regarder comment gagner des pièces dans la partie récupérer des objets et utiliser cette mécanique pour perdre des vies.