Sur cette page tu découvrira comment:
Pour savoir comment créer un système de tir, tu peux regarder cette page.
Ajoute un joueur pour tester ton niveau !
Modifie les touches du clavier pour le déplacement
Cette mécanique peut être très utile que ce soit pour récupérer des objets, pour avoir un score, activer des boosts ou encore faire des inventaires, valider des niveaux seulement si certains objets sont ramassés… On utilisera même une mécanique proche pour créer une killzone!
La base du script repose sur la collision entre notre personnage et l’objet. Par exemple, quand on touche un objet on le détruit:
Pour faciliter la détection de la collision, il est préférable d’utiliser OnTriggerEnter et penser à mettre le collider de l’objet qu’on veut ramasser en IsTrigger.
Afin de ne pas tout détruire mais seulement certains objets, on peut utiliser un Tag et vérifier si l’objet a le bon tag avant de le détruire.
Et penser à mettre le bon tag à l’objet.
Avec la fonction Destroy on peut aussi spécifier un temps d’attente avant de détruire l’objet en secondes. Par exemple attendre 3 secondes avant de détruire l’objet :
Avant de détruire l’objet on peut faire toutes sortes de choses :
Tu peux regarder cette vidéo tuto qui présente la création d’une Killzone pour ramener ton joueur au début du jeu s’il tombe !
Tu trouveras ci-dessous le tuto écrit du mécanisme de jeu.
Pour créer une killzone nous allons utiliser les principes de collision expliqué ci-dessus et de déplacement d’objets. Tu peux regarder ces parties là avant.
Quand le joueur entre en collision avec un objet avec le tag “zone de mort”, le joueur retourne à sa position de départ. Pour cela on va changer son transform.position.
Nous avons aussi besoin de mémoriser la position de départ. Pour cela on va créer une variable pour stocker cette valeur et la récupérer dans la fonction Start() et pour récupérer la position de départ on va utiliser la variable transform.position.
Le mécanisme des Checkpoints est proche du mécanisme des Killzone et nous allons reprendre le script Killzone pour le modifier légèrement. Si tu ne sais pas faire les Killzone, je t’invite à regarder cela avant!
Quand on récupère un objet, on change la position de réapparition du joueur quand il meurt. On utilise exactement le même mécanisme que celui utilisé pour fixer le point de départ initial, sauf que cette fois, c’est au moment de la collision qu’on récupère la valeur.
Attention ce script remplace le script killzone, il faut soit le modifier, soit le remplacer mais ne pas utiliser les deux en même temps.
Quand on ramasse des objets, on peut vouloir donner un boost ou un malus à notre personnage comme se déplacer plus vite ou plus lentement, sauter plus haut, ne plus pouvoir sauter ou se déplacer, être plus grand ou plus petit… Dans cet exemple, on modifiera la vitesse de déplacement.
Attention ce script utilise le RigidBodyFPS des standarts assets, si tu utilise un autre contrôleur, les variables de ce contrôleur auront d’autres noms
On peut modifier les valeurs du contrôleur de notre personnage via le RigidbodyFirstPersonController. On commence par importer ce composant qui n’est pas connu de base de Unity en ajoutant cette ligne en haut de notre script :
using UnityStandardAssets.Characters.FirstPerson;
Quand on ramasse un objet, on modifie les valeurs de mouvements de notre personnage.
On reprend la structure de base du script utilisé pour ramasser des objets et les mécanismes de collision, mais cette fois on va modifier la vitesse de déplacement de notre personnage.
On commence par créer une variable pour récupérer le RigidbodyFirstPersonController. 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.
Puis on modifie la valeur souhaitée dans movementsSettings, ici par exemple on multiplie la vitesse par 2.
Et l’on termine en détruisant l’objet pour éviter d’utiliser le bonus à l’infini.
Si l’on souhaite on peut également dire qu’au bout d’un certain temps, la vitesse retourne à sa valeur initiale.
Pour cela nous allons créer une fonction qui réinitialise la vitesse et utiliser la fonction Invoke() pour appeler cette fonction au bout d’un certain temps. Voici comment créer une fonction :
Le mot void permet d’indiquer qu’on crée une fonction, Reinitialise est le nom de la fonction et on écrira le code de cette fonction entre les accolades { }.
Dans cette fonction nous allons récupérer notre contrôleur puis remettre la valeur modifiée à sa valeur initiale. Ici on divise la vitesse par 2.
Enfin lors de la collision on appelle la fonction Invoke() pour appeler notre fonction Reinitialise au bout d’un certain temps (ici 10 secondes).
Pour pouvoir gérer l’augmentation de la vitesse et le temps du pouvoir directement depuis Unity on peut créer des variables publiques.
Avec ces mécanismes, on peut facilement modifier tout un tas d’autres valeurs pour faire des boosts ou des malus personnalisés.