Page 1 sur 1

Animer un système d'amortissement complexe sans se prendre la tête

Publié : 17 Avr 2016 14:52
par LaGriffe
Le Wheel Collider fournit par Unity est un outil précieux pour tout ceux qui souhaitent gérer des véhicules à roues. De multiples tutoriels illustrent leur utilisation et la façon de les coupler visuellement avec des roues.
Dans le cas d'un train d'atterrissage avec de nombreux éléments en mouvements, cela peut d'avérer délicat. Diverses façon de faire existent, j'ai choisi celle qui me semble la plus simple et nécessitant un minimum de lignes de codes et en quatre étapes, inspirée de mon expérience de moddeur pour Lock-On.

Première étape
Je crée une animation d'une durée d'une seconde - soit 60 trames tels que configurés par défaut - avec point de départ à 0 - la position du train en position détendue - et à une seconde en position contractée.
Image
Image

Deuxième étape
Dans la fenêtre Animator, je vire l'animation qui a été ajoutée dans le Layer par défaut pour la glisser dans un Layer à part. Le seul paramètre important étant de mettre le poids de ce layer à 1.
J'ai réglé la vitesse de l'animation à 0 et décoché l'option Loop. En pratique, cela ne change rien, mais ça fait plus propre.
Image


Troisième étape
La seule vraiment délicate, c'est de positionner proprement son Wheel Collider.
- Je crée un Empty que je place précisément au centre de la roue. Dans mon cas précis, dans la mesure où le train est rétractable, je parente cet objet avec la jambe principale du train d'atterrissage.
- Comme initialement le train est en position détendue, je règle le Target Position à zéro. Si jamais l'amortisseur était en position médiane, j'aurais mis 0.5, s'il était pleinement contracté, je l'aurais réglé à 1.
- Je règle maintenant le Wheel Collider pour que celui-ci soit au centre de la roue en ayant le même diamètre, ou légèrement inférieur pour donner un petit effet d'écrasement sur le sol, et remet le Target Position dans ma position souhaitée.
Image
Image


Quatrième et dernière étape.
Je code tout ça !
Il s'agit de récupérer la position relative du Wheel Collider entre la position d'origine et la position maximale spécifiée dans le champs Suspension Distance, et passer cette valeur dans l'animation pour lui demander d'afficher une trame précise.

Code : Tout sélectionner

Vector3 pos;
Quaternion quat;
wheelCollider.GetWorldPose (out pos, out quat);
Vector3 wheelpos = wheelCollider.gameObject.transform.position;
float distance = Vector3.Distance (wheelpos, pos);
float suspensionDistance = wheelCollider.suspensionDistance;
float frame = distance / suspensionDistance;
		
m_animator.Play ("MonAnimation", MonLayer, frame); 
Résultat :
https://www.youtube.com/watch?v=UpxuqRBxALU

Ouala ! :)

Re: Animer un système d'amortissement complexe sans se prendre la tête

Publié : 18 Avr 2016 17:20
par Alesk
Bien joué ^_^

Re: Animer un système d'amortissement complexe sans se prendre la tête

Publié : 19 Avr 2016 21:08
par E3DStef
Super le tuto, merci à toi...

Mummm me tardes de trouver du temps pour suivre ton projet plus assidument ;-)

A+

Stef

Re: Animer un système d'amortissement complexe sans se prendre la tête

Publié : 19 Avr 2016 21:16
par LaGriffe
Merci. :cote:

Re: Animer un système d'amortissement complexe sans se prendre la tête

Publié : 22 Avr 2016 18:18
par Max
Au fait, j'ai zappé, mais je t'avais fait un petit billet au niveau du portail (tu as certainement vu) concernant ton tuto ;)

Re: Animer un système d'amortissement complexe sans se prendre la tête

Publié : 22 Avr 2016 21:45
par LaGriffe
Je viens de voir !

Merci, m'sieur. :)

Re: Animer un système d'amortissement complexe sans se prendre la tête

Publié : 23 Avr 2016 21:40
par Glloq
Joli!