Suspension d'un véhicule

 

Nous allons créer dans ce tutorial des amortisseurs pour une voiture. L'objectif est de contrôler une roue de façon qu'elle reste fermement collée au sol aussi longtemps que le permet la suspension.
L'idée de base est de détecter à quel endroit, entre le maximum et le minimum de l'intervalle de la suspension, la roue entre en contact avec le sol. Pour ce calcul le nœud Collision de rayon est particulièrement pratique. Un neutre est utilisé en tant que suspension principale, avec deux neutres enfants, représentant les limites supérieures et inférieures de l'intervalle. Ces deux neutres sont les points de référence utilisé par le nœud collision de rayon.
La collision de rayon va projeter un rayon (tracer une ligne) entre ces deux points et la première intersection avec un polygone donné est enregistrée. Le nœud va nous transmettre l'événement (valeur booléenne) et aussi la position globale du choc.
Puisque nous voulons que la suspension fonctionne en relation avec le véhicule, nous devons faire les calculs en coordonnées locales, sinon la roue se déplacerait le long de l'axe global Y et non pas selon l'axe Y de la voiture. Pour simplifier cette opération j'ai inclus deux nœuds COFFEE qui permettent de convertir facilement une position locale vers une globale et vice versa. (info)
Pour simplifier les contrôles nous ajoutons des données utilisateur sur le neutre Suspension pour définir les limites de l'intervalle et le rayon de la roue. L'objet collision et la roue sont assignés par des champs Lien dans les caractéristiques de la propriété. (info)
En plus du contrôle de la suspension il y a une petite expression sur chaque neutre définissant les limites supérieure et inférieure qui va les placer correctement en fonction des réglages du neutre Suspension.


Pour rendre l'expression facilement transférable à d'autres objets toutes les références sont soit relatives (neutres des limites de suspension/Points de rayon) soit effectuées par des champs Lien.

Pour que la suspension fonctionne correctement nous devons faire la différence entre deux états, selon qu'une collision a été détectée ou non.
Si une collision a lieu sa position globale est convertie en coordonnées locales relatives à la suspension et le rayon de la roue est ajouté à sa position locale Y. La nouvelle position locale est à nouveau convertie en coordonnées globales et assignée à la roue.
Si la collision n'a pas lieu la position locale du neutre limite inférieure est utilisée (extension complète de la suspension)
Vous trouverez des commentaires supplémentaires dans l'expression elle même.
scène animation

Retour à l'index