Suite à l’ajout du Bumper dans notre dernier article, j’ai voulu ajouter un genre de booster dans Unity pour réaliser le rêve Sonic du passage de gauche sur notre parcours.
Voici le résultat des premiers tests avec un texture animée et l’accélération du booster dans Unity appliqué au personnage:
Création de l’objet 3D Booster dans Unity :
Donc pour commencer, je me suis basé sur le même principe que nous avons utilisé pour le ressort / Bumper (le code est déjà prêt, autant le réutiliser !!). J’ai simplement créer un Plane dans Unity avec avec un BoxColider mis sur “Trigger” et j’ai enlever le mesh collider ajouter par defaut. Puis un ajout de matériel (on y viendra après) et d’un petit script :
Pour le matériel, j’ai pris le premier image avec des flèches que j’ai trouver sur google (juste pour le test, je ferrai mes propres graphismes après). Ensuite, suffit de glisser /deposer sur notre plane et le tour est joué. Des fois, il faut revoir les options d’import sur l’image et s’assurer que tout est bien réglé et que l’image s’affiche bien.
Puis un Box Collider dont j’ai modifier les proportions pour que la zone de détection se trouve au dessus de notre objet (on peut utiliser le bouton “Edit Collider” pour regler au plus prés la taille et position):
Maintenant c’est parti pour le code du Booster dans Unity :
On va réutiliser la même fonction que pour le Bumper, il faut donc passer un vecteur3 et une force au fonction throwBack() du joueur.
Contrairement au Ressort qui allait envoyer sur l’axe Y, notre booster est orienter vers l’axe X (Dans mon cas, cela peut changer en fonction du texture et l’orientation). Il faut donc définir notre force et direction, comme pour le Bumper, puis appeler la fonction dans “OnTriggerEnter()”.
1 2 3 4 5 6 7 8 9 10 11 12 |
public class boosterReactions : MonoBehaviour { public float force = 100F; private Vector3 boostForward; void OnTriggerEnter(Collider col) { //Getting the alignment of the Booster in world coords boostForward = transform.TransformDirection(new Vector3(1, 0, 0)); //grabbing the react script and passing direction and force col.GetComponent<playerReactions>().throwBack(boostForward, force); } } |
Je préfère récupérer l’orientation de l’élément au moment que le joueur entre en contact avec. Cela permet d’avoir les boosters qui modifient leur orientation au cours du jeu.
Mais ça c’est du déjà vu, ceux qui est nouveau ici c’est la texture animé sur le Booster dans Unity. Et le wiki nous montre exactement comment faire.
On reprend le code brut comme ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class boosterReactions : MonoBehaviour { //Texture animation public float scrollSpeed = 0.5F; private Renderer rend; private float initialScroolSpeed; //force application public float force = 100F; private Vector3 boostForward; // Use this for initialization void Start () { //Texture animation rend = GetComponent<Renderer>(); initialScroolSpeed = scrollSpeed; } void OnTriggerEnter(Collider col) { //Getting the alignment of the spring in world coords boostForward = transform.TransformDirection(new Vector3(1, 0, 0)); //grabbing the react script and passing direction and force col.GetComponent<playerReactions>().throwBack(boostForward, force); } void Update() { //Texture animation float offset = Time.time * scrollSpeed; rend.material.mainTextureOffset = new Vector2(offset, 0); } } |
Dans un 2eme temps, je vais voir pour ajouter du son et un accélération du texture au contact avec le joueur. (C’est pour cela qu’il y a un variable initialScroolSpeed mais qui n’est jamais utilisé !)
Stay tuned 😉