Translation et Rotation
ModĆØles 3D avec Tinkercad
Voyons les bases de la modƩlisation sur TINKERCAD, puis comment importer notre Objet dans Unity et lui donner un Collider adƩquat.
Aller sur Tinkercad
PrƩsentation VidƩo
Mouvement : Faire faire des Aller Retours Ć des Objets
A lire avant de regarder la VidƩo
Pour pouvoir Dupliquer et Déplacer un objet en mouvement que tu vas créer. Il va falloir créér un dossier vide dans la Hierarchie : Clic droit > Create Empty. Renomme ce dossier vide.
Dans mon exemple jāanime une plateforme en Mouvement, nāhĆ©sites Ć donner un nom qui correspond Ć ton objet.Ā
Puis tu vasĀ Glisser, DĆ©poserĀ Ć lāintĆ©rieur du dossier « PlateformeMVTĀ Ā» lāobjet Ć qui tu veux donner du mouvement.Ā
Et voilĆ cāest tout pour lāinstant !Ā
Après avoir regarder la vidéo, tu pourras Dupliquer le dossier « PlateformeMvt » qui contient ton Objet en Mouvement si tu veux avoir un autre Objet dans la scène avec le même mouvement.
Tu pourras donc dĆ©placer le dossier « PlateformeMvtĀ Ā» qui contient lāobjet en mouvement, et non lāobjet lui-mĆŖme !Ā Car les dĆ©placements de lāobjet son relative Ć sa position dans le monde. Et son monde Ć lui cāest son dossier « PlateformeMvt » qui le contient. Mais lāobjet sāen fiche de savoir où estĀ son monde dans la scĆØne. Tu peux donc ainsi avoir un second Objet en mouvement ailleurs dans la scĆØne
PrƩsentation VidƩo Mouvement
Tu trouveras ci-dessous le tuto Ć©crit pour rĆ©aliser le mĆ©canisme de jeuĀ dāune autre maniĆØreĀ pour la partie aller-retour et encore en-dessous le code pour que le joueur suive la plateforme.
Explication
Elle permet de récupérer une valeur qui évolue régulièrement entre -1 et 1 au cours du temps.
Principe du script
A chaque frame on déplace légèrement notre objet en récupérant la valeur du sinus et en ajoutant cette valeur à la position initiale de notre objet pour le faire bouger.
Pour mémoriser la position initiale, on la stocke dans une variable de type Vector3 pour pouvoir la réutiliser à tout moment. Pour cela on crée une variable, et on récupère sa valeur dans la fonction Start().
Pour récupérer le sinus on va utiliser la fonction Mathf.Sin(float temps). Pour récupérer le temps réel on a la fonction Time.time.
Pour choisirĀ lāaxe de dĆ©placement, on crĆ©e Ć©galement uneĀ variable publique de type Vector3.
On peut Ć©galement gĆ©rer la vitesse de dĆ©placement en modifiant la frĆ©quence de notre sinus Ć lāaide dāune variable publique.
Bouger avec les plateformes
Quand on a des plateformes qui bougent, on peut vouloir que le personnage se déplace en même temps que celle-ci. Pour cela on va utiliser la notion de parenté.
La parentƩ dans Unity
Dans lāinterface Unity quand on crĆ©e des objets, on peut les mettre les uns dans les autres.
Par exemple ci dessous on a un objet plateforme qui bouge qui contient lāobjet plateforme solide. On dit que plateforme qui bouge est le parent et plateforme solide est lāenfant.
Quand un objet parent se déplace, tous ses enfants se déplacent de la même manière que lui.
Ā
Principe du Script
Pour que le joueur bouge avec la plateforme, tant quāil est sur celle-ci, on va faire en sorte que le joueur soit enfant de la plateforme qui bouge. Pour cela on a la variableĀ transform.parent.
On peut utiliser les fonctions OnTriggerEnter pour détecter le début de la collision et OnTriggerExit pour détecter la fin de la collision.
Remarque : ce script est prévu pour être sur la plateforme qui bouge et pas le joueur.
On a deux Ʃtapes dans ce script :
- Quand le joueur entre en collision avec un objet, cet objet devient parent du joueur
- Quand le joueur sort de la collision on rƩinitialise son parent
Ćtape 1
Ćtape 2
Collider et Trigger ā que faire quand on a besoin des deux ?
Pour que notre script fonctionne il faut que le collider de lāobjet soit en mode Trigger. Cependant en mettant le collider en mode Trigger, lāobjet nāest plus solide et le joueur passe Ć travers.Ā
On va donc avoir besoin de 2 objets différents :
- un objet en mode TriggerĀ qui bouge qui sera parent du joueur et de la plateforme solide
- un objet en mode ColliderĀ enfant de lāobjet en mode Trigger qui servira pour se poser dessus. Ćtant lui-mĆŖme enfant de lāobjet qui bouge, il bougera aussi avec lui.
Voici les différentes étapes pour faire ça facilement :
- Créer la plateforme solide ou le joueur se posera avec un collider.
- CrĆ©er un objet vide dans cette plateformeĀ et le renommer (BoiteQuiBouge dans lāexemple)
- Ajouter un Collider Ć cet objet vide. Le collider prend alors directement la forme de lāobjet parent.
- Passer le Collider de lāobjet vide en IsTrigger
- Inverser la parenté (voir schéma)
Ćtape 5a : Ć©tat intial
Ā Ćtape 5b : sortir la Boite qui bouge
Ā Ćtape 5c : mettre la plateforme dans la Boite
- Mettre les scripts de mouvement et le script devenirParent sur la boite qui bouge
- VƩrifier que le joueur a bien le tag Player
- Pour ĆŖtre sĆ»r que la collision soit bien dĆ©tectĆ©e on peut agrandir le collider de la boite pour qu’elle soit un peu plus grande que la plateforme elle mĆŖme.
le collider de la boite dƩpasse de la plateforme
Faire Tourner des Objets
Les rotations sont utiles pour avoir des environnements qui bougent, faire tourner des objets sur eux-mĆŖmes ou autour dāun centre, ouvrir une porte, faire des orbes de protectionā¦
Pour gĆ©rer la rotation dāun objet on va sāintĆ©resser Ć sonĀ Transform
VidƩo tuto Faire tourner un gameobject
VidĆ©o tuto qui prĆ©sente la crĆ©ation dāun script pour crĆ©er des plateformes qui tournent !
Tourner sur lui mĆŖme (Rotate)
Pour faire tourner un objet sur lui mĆŖme on peut utiliser la fonctionĀ transform.Rotate( Vector3 anglesRotation). Lorsque cette fonction est appelĆ©e, elle feraĀ tourner lāobjet une fois dans lāangle indiqué sur chacun des axes. Le point dāorigine de ces axes est le centre de lāobjet.Ā
Par exemple en utilisant la fonctionĀ UpdateĀ on peut tourner Ć chaque frame de 5° atour de lāaxe X
On peut crĆ©er une variable publique pour changer plus facilement la rotation depuis lāinterface dāUnity.
Enfin la fonction Update est appelĆ©e Ć chaque Frame. Mais, selon la puissance des ordinateurs, il nāy a pas autant de Frame par seconde. Pour sāassurer que la vitesse de rotation soit la mĆŖme sur tous les ordinateurs, on va multiplier lāangle par le temps Ć©coulĆ© depuis la derniĆØre frame grĆ¢ce Ć la variable Time.deltaTime.
Si lāon souhaite faire tourner une seule fois lāobjet dans une position particuliĆØre, alors on nāas pas besoin de sāoccuper du temps ni de rajouter le Time.deltaTime.
Tourner autour dāun autre objet (RotateAround)
Pour faire tourner un objet autour dāun autre nous allons utiliser la fonctionĀ transform.RotateAround( Vector3 centre, Vector3 Axe, float angle) :
- LeĀ centre de rotationĀ est lāobjet autour duquel on veut faire tourner lāobjet. On peut facilement rĆ©cupĆ©rer la position dāun objet grĆ¢ce Ć son transform et Ć une variable publique.
- LāaxeĀ permet de dire comment tourner autour du centre. Par exemple avec un axe (0,1,0), lāobjet tournera autour de lāaxe Y.
- LāangleĀ permet de rĆ©gler la vitesse de rotation en prĆ©cisant de combien de degrĆ© lāobjet doit bouger. On pense Ć le multiplier par le temps passĆ© depuis la derniĆØre Update.
