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 :
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.
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.
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 :
Il existe également les fonctions :
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 :
Pour créer un nouvel objet, nous aurons besoin de deux choses :
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.
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.
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 :
Pour aller plus loin sur le tir voici quelques idées: