{DB-AL} Roulis d un avion
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Re: {DB-AL} Roulis d un avion
As-tu consulté intégralement les liens que je t'ai donnés ?
Time.deltaTime donne le temps écoulé depuis la dernière exécution de la fonction update et ce n'est jamais une valeur fixe, donc ce que ce changement de valeur est normal.
Ce n'est pas ça qui provoque du lag.
Time.deltaTime donne le temps écoulé depuis la dernière exécution de la fonction update et ce n'est jamais une valeur fixe, donc ce que ce changement de valeur est normal.
Ce n'est pas ça qui provoque du lag.
-
- Messages : 92
- Inscription : 28 Mars 2018 01:26
- Localisation : Alpes - Suisse
Re: {DB-AL} Roulis d un avion
OK merci
je vais finir de regarder tout ça, j ai quand même appris pas mal de chose rien qu avec cette histoire de roulis
En ce qui concerne TIme.deltaTime, je ne sais pas trop, ça ne saccade plus, je pense que cela venait de la camera qui était mal programmée
J ai une bête camera fixée a l avion et pas le moindre lag
Finalement je me retrouve avec un code hyper simple
Up
J ai entièrement fait le code, maintenant il y a la résistance de l air, la gravite, la portance des ailes, et la poussée des moteurs
Bien sur pour faire une vrai simulation il va falloir que je me lance dans le calcul des vecteurs, c est assez compliqué a expliquer mais je vais devoir bloquer les commandes de l avion selon certains vecteurs pour qu on ne pousse pas faire un 180 a plein vitesse, ou par exemple, quand on change de direction, on augmente un vecteur dans un direction et on diminue dans l autre
je vais finir de regarder tout ça, j ai quand même appris pas mal de chose rien qu avec cette histoire de roulis
En ce qui concerne TIme.deltaTime, je ne sais pas trop, ça ne saccade plus, je pense que cela venait de la camera qui était mal programmée
J ai une bête camera fixée a l avion et pas le moindre lag
Finalement je me retrouve avec un code hyper simple
Code : Tout sélectionner
transform.position += transform.forward * speed * Time.deltaTime;
speed -= transform.forward.y * 20.0f * Time.deltaTime;
// Less speed if you climb, more if you go down
// Roulis
if (transform.rotation.eulerAngles.z > 20 && transform.rotation.eulerAngles.z < 180)
{
transform.position -= transform.right * 1.0f * speed / 400;
}
if (transform.rotation.eulerAngles.z > 180 && transform.rotation.eulerAngles.z < 340)
{
transform.position += transform.right * 1.0f * speed / 400;
}
J ai entièrement fait le code, maintenant il y a la résistance de l air, la gravite, la portance des ailes, et la poussée des moteurs
Code : Tout sélectionner
transform.position += transform.forward * vitesseJet * Time.deltaTime;
transform.Rotate(Input.GetAxis("Vertical"), 0.0f, -Input.GetAxis("Horizontal"));
vitesseJet = rb.velocity.magnitude;
portanceAiles = vitesseJet / 10;
if (portanceAiles >= 10)
{ portanceAiles = 10.0f;
}
if (vitesseJet >= 300)
{
vitesseJet = 300.0f;
}
rb.AddRelativeForce(Vector3.forward * thrust); // En avant
rb.drag = AirResistance; // resistance de l air
rb.AddForce(-transform.up * gravity); // vers le bas
rb.AddForce(transform.up * portanceAiles); // vers le haut
// rb.AddRelativeForce(-Vector3.forward * AirResistance);
// throttle
if (thrust < 100)
{
if (Input.GetButtonDown("throttle+"))
{
thrust = thrust + 20.0f;
}
}
if (thrust > 0)
{
if (Input.GetButtonDown("throttle-"))
{
thrust = thrust - 20.0f;
}
}
}
Re: {DB-AL} Roulis d un avion
pas mal, comme quoi parfois le simple est tout a fait fonctionnel.
la simulation physique des objets est assez complexe bien que souvent simplifiable. cela dépend du but recherché : simulation ou arcade.
si tu veux pousser un peu plus la simulation, une notion est a prendre en compte : les effort d'un fluide (ici l'air) sur un objet en mouvement (ici ton avion) ne sont pas linéaire mais fonction du carré de la vitesse.
par exemple : portance = x * V² , ou x est un coefficient sans dimension et V la vitesse de l'objet, et le vecteur portance perpendiculaire au vecteur vitesse.
Pourrais tu aussi mettre ton code complet si possible (le dernier), ici on dirait que tu modifie la position du transform, puis applique des forces a son rigidBody, ce qui n'est pas très recommandé. c'est soit l'un soit l'autre.
Dans ton dernier code :
il n'est pas utile normalement de le définir a chaque frame. "AirResistance" devrait être un coefficient fixe propre a l'avion, différent pour chaque avions.
cela n'as pas lieu d’être normalement. ton rigidBody a une masse, donc unity gère déjà la gravité. de plus transform.up est propre a ton Gameobject, donc si ton avion vole a la verticale, transform.up deviens un vecteur horizontal, ou si ton avion vole a l'envers ( cas d'une vrille), transform.up est bien vertical, mais dirigé vers le haut....
a la limite ton code devrait etre :
Pour avoir beaucoup codé sur les forces et les mouvements ( simulation voiture), je trouve très utile d'avoir un visuel sur les forces que l'on cherche à appliquer, visualiser la direction et la valeur, avec des "debug.DrawRay", je t'encourage a le faire .
la simulation physique des objets est assez complexe bien que souvent simplifiable. cela dépend du but recherché : simulation ou arcade.
si tu veux pousser un peu plus la simulation, une notion est a prendre en compte : les effort d'un fluide (ici l'air) sur un objet en mouvement (ici ton avion) ne sont pas linéaire mais fonction du carré de la vitesse.
par exemple : portance = x * V² , ou x est un coefficient sans dimension et V la vitesse de l'objet, et le vecteur portance perpendiculaire au vecteur vitesse.
Pourrais tu aussi mettre ton code complet si possible (le dernier), ici on dirait que tu modifie la position du transform, puis applique des forces a son rigidBody, ce qui n'est pas très recommandé. c'est soit l'un soit l'autre.
Dans ton dernier code :
Code : Tout sélectionner
rb.drag = AirResistance; // resistance de l air
Code : Tout sélectionner
rb.AddForce(-transform.up * gravity); // vers le bas
a la limite ton code devrait etre :
Code : Tout sélectionner
rb.AddForce(-Vector3.up * gravity);
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
-
- Messages : 92
- Inscription : 28 Mars 2018 01:26
- Localisation : Alpes - Suisse
Re: {DB-AL} Roulis d un avion
Merci djulio74,
Au final c était pour essayer d appliquer differentes force,
en avant, selon la puissance des moteurs
en arriere selon la résistance de l air
en haut, pour la portance des ailes, et simuler un décrochage quand on vole trop bas
en bas, la gravitee
Sinon, pour la portance je me demandais comment faisait les avions, et surtout les jets, ils décollent a 200 km/h , mais une foie a 1000km/h, avec la portance des ailes, ils doivent carrément pas arriver a voler a plats, je sais qu il y a une réponse toute simple car dans les simu on vol a plat
Dans mon code, a la base il y a une gravitee de 10 vers le bas
A partir de x km/h , portance ailes passe a 10 et l avion va tout droit
Ce qui fait que si on vole trop lentement, on tombe
C est pas vraiment de la simulation mais une petite astuce
+Mon code en mousse
Quand je vois cette ligne, je me demande comment l avion fait pour demarrer
A t=0 , Vector3.forward doit être a 0, donc qu importe le thrust l avion en devrait pas bouger
Nouveau code d après tes remarques
ce bout de code, je crois qu il ne sert a rien
Oui c est logique, en plus la variable AirResistance est totalement inutile puisque on peut voir rb.drag dans l inspecteur
rb.drag = AirResistance; // resistance de l air
il n'est pas utile normalement de le définir a chaque frame. "AirResistance" devrait être un coefficient fixe propre a l'avion, différent pour chaque avions.
Je t avoue qu en regardant ce code je ne comprend même pas la signification, en plus a chaque foie je confonds vector3.up et tansform.up
rb.AddForce(-transform.up * gravity); // vers le bas
cela n'as pas lieu d’être normalement. ton rigidBody a une masse, donc unity gère déjà la gravité. de plus transform.up est propre a ton Gameobject, donc si ton avion vole a la verticale, transform.up deviens un vecteur horizontal, ou si ton avion vole a l'envers ( cas d'une vrille), transform.up est bien vertical, mais dirigé vers le haut....
Au final c était pour essayer d appliquer differentes force,
en avant, selon la puissance des moteurs
en arriere selon la résistance de l air
en haut, pour la portance des ailes, et simuler un décrochage quand on vole trop bas
en bas, la gravitee
Sinon, pour la portance je me demandais comment faisait les avions, et surtout les jets, ils décollent a 200 km/h , mais une foie a 1000km/h, avec la portance des ailes, ils doivent carrément pas arriver a voler a plats, je sais qu il y a une réponse toute simple car dans les simu on vol a plat
Dans mon code, a la base il y a une gravitee de 10 vers le bas
A partir de x km/h , portance ailes passe a 10 et l avion va tout droit
Ce qui fait que si on vole trop lentement, on tombe
C est pas vraiment de la simulation mais une petite astuce
+Mon code en mousse
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlyControler2 : MonoBehaviour {
float speed = 0.0f;
public float thrust = 1;
public Rigidbody rb;
public float gravity;
public float portanceAiles;
public float AirResistance;
public float vitesseJet;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
Debug.Log("thrust : " + thrust);
transform.position += transform.forward * vitesseJet * Time.deltaTime / 200.0f;
transform.Rotate(Input.GetAxis("Vertical"), 0.0f, -Input.GetAxis("Horizontal"));
vitesseJet = rb.velocity.magnitude;
portanceAiles = vitesseJet / 10f;
if (portanceAiles >= 10f)
{ portanceAiles = 10f;
}
if (vitesseJet >= 300)
{
vitesseJet = 300;
}
rb.AddRelativeForce(Vector3.forward * thrust); // En avant
rb.drag = AirResistance; // resistance de l air
rb.AddForce(-transform.up * gravity); // vers le bas
rb.AddForce(transform.up * portanceAiles); // vers le haut
// if (transform.rotation.eulerAngles.z > 20 && transform.rotation.eulerAngles.z < 180)
// {
// transform.position -= transform.right * 1.0f * vitesseJet / 80;
//}
//if (transform.rotation.eulerAngles.z > 180 && transform.rotation.eulerAngles.z < 340)
// {
// transform.position += transform.right * 1.0f * vitesseJet / 80;
// }
// rb.AddRelativeForce(-Vector3.forward * AirResistance);
// throttle
if (thrust < 101)
{
if (Input.GetButtonDown("throttle+"))
{
thrust = thrust + 20f;
}
}
if (thrust > 0)
{
if (Input.GetButtonDown("throttle-"))
{
thrust = thrust - 20f;
}
}
}
}
Code : Tout sélectionner
rb.AddRelativeForce(Vector3.forward * thrust); // En avant
A t=0 , Vector3.forward doit être a 0, donc qu importe le thrust l avion en devrait pas bouger
Nouveau code d après tes remarques
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlyControler2 : MonoBehaviour {
public float thrust = 1;
public Rigidbody rb;
public float portanceAiles;
public float x;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
Debug.Log("thrust : " + thrust);
transform.position += transform.forward * rb.velocity.magnitude * Time.deltaTime / 200.0f;
transform.Rotate(Input.GetAxis("Vertical"), 0.0f, -Input.GetAxis("Horizontal"));
portanceAiles = Mathf.Sqrt(rb.velocity.magnitude) * x;
if (rb.velocity.magnitude >= 300)
{
// rb.velocity.magnitude = 300; // impossible car en lecture seule
}
rb.AddRelativeForce(Vector3.forward * thrust); // En avant
rb.AddForce(Vector3.up * portanceAiles); // vers le haut
// throttle
if (thrust < 101)
{
if (Input.GetButtonDown("throttle+"))
{
thrust = thrust + 20f;
}
}
if (thrust > 1)
{
if (Input.GetButtonDown("throttle-"))
{
thrust = thrust - 20f;
}
}
}
}
Code : Tout sélectionner
// transform.position += transform.forward * rb.velocity.magnitude * Time.deltaTime / 200.0f;
Re: {DB-AL} Roulis d un avion
oui il va falloir lire un peu de doc, et te familiariser avec ces données, qui te seront utiles , et archi-présente, quelque soit ton projet.Je t avoue qu en regardant ce code je ne comprend même pas la signification, en plus a chaque foie je confonds vector3.up et tansform.up
Vector3up = vector3(0,1,0), et ce dans la référence world. un Vecteur unitaire dirigé a la vertical, dans le monde. indépendant de tout objet.
transform.up = un vecteur vertical aussi dirigé vers le haut, mais dans la référence du transform, donc gameObject., dnc varie si ton objet bouge. il est propre a celui ci.
pour la portance elle est étudiée pour qu'a vitesse de croisière, l'avion plane ( ni monte ni descend). pour le décolage a plus faible vitesse, l'avion se cabre, ce qui augmente considérablement la portance.Sinon, pour la portance je me demandais comment faisait les avions, et surtout les jets, ils décollent a 200 km/h , mais une foie a 1000km/h, avec la portance des ailes, ils doivent carrément pas arriver a voler a plats, je sais qu il y a une réponse toute simple car dans les simu on vol a plat
Pour ton code final, encore une fois je te vois mélanger des transform et rigidBody. il faut éviter ça au maximum selon moi.
faut faire soit tout en modifiant les valeurs de position rotation du transform, soit déplacer, donner une rotation en donant des force et torque.
edit :
du coup dans ton cas, remplace Vector3.forward par transform.forward. De plus si l'avion commence a avancer car que ce soit l'un ou l'autre, c'est toujours un vecteur unitaire, donc non null avec pour magnitude ( longueur) = 1.Quand je vois cette ligne, je me demande comment l avion fait pour demarrer
A t=0 , Vector3.forward doit être a 0, donc qu importe le thrust l avion en devrait pas bouger
c'est rb.Velocity qui est le vecteur vitesse, donc null si l'avion n'avance pas.
Perso, j'étais comme toi au début, a rajouter petit a petit des lignes de code, plus ou moins a taton pour essayer d'avoir les effet escompté. tu vas vite te retrouver a ne plus t'y retrouver justement dans ton code. Mais forcé de constater qu'il est meilleur, en amont, de bien étudier les avions dans ton cas. quelles forces s'appliquent, pourquoi, où, dans quelle direction..etc. Google sera ton meilleur amis. Analyse, décortique...
Commet vole un avion?
pourquoi il prend du roulis quand je tire le manche a droite ou gauche?
quand il prend du roulis, pourquoi je dois compenser en tirant le manche pour maintenir l'altitude?
- quelles sont les commandes d'un avion? ( manche, gaz, pedal..) et leurs fonction?
un avion a des ailes, certes, mais aussi volet, gouverne..etc. chaque élément a son importance, exerce sa propre force sur l'avion, en un point précis.
Tu as une bonne approche dans l'ensemble, c'est vrai mais tu doit être plus au point sur certaines notions avant je pense:
- les vecteurs
- les forces (AddForce, AddrelativeForce, AddTorque.. etc.)
- les repères ( world, local..)
- les notion (velocity, forward, up, magnitude.. etc)
Je referais ton code dans l'aprem, en essayant de bien l'annoter pour t'expliquer le pourquoi du comment.
et si t'as des questions, hésite pas.
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
-
- Messages : 92
- Inscription : 28 Mars 2018 01:26
- Localisation : Alpes - Suisse
Re: {DB-AL} Roulis d un avion
Woua je suis trop content
Visiblement tu as édité ton post entre temps ou je n avais pas lu en entier, mais je voulais montrer le nouveau code qui me permet de tourner
Oui c est exactement ça, je prends des bouts de code a gauche et a droite, mais c est ma manière d apprendre, si au final je finis comme toi a faire de gigantesques maps procédurales pourquoi pas faire les mêmes erreurs
Le truc qui me casse la tete c est de faire tourner l avion, qu il conserve ses forces en changeant de direction
Pour l instant quand on tourne, disons a droite, l avion se tourne vers la droite, mais glisse sur la gauche
Dans la réalité, ce sont les ailes qui empêchent de glisser vers la gauche , tandis si on tourne uniquement avec le palonnier on glisse
Il y a aussi l angle maximum auquel on peut tourner, la vitesse qui va se réduire, etc
Code : Tout sélectionner
float turn = -Input.GetAxis("Horizontal");
rb.AddTorque(transform.forward * torque * turn);
float pitch = Input.GetAxis("Vertical");
rb.AddTorque(transform.right * torque * pitch);
if (Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0) // Stop la rotation quand on ne presse pas de touche
rb.angularDrag = 0.8F;
else
rb.angularDrag = 5;
Oui c est exactement ça, je prends des bouts de code a gauche et a droite, mais c est ma manière d apprendre, si au final je finis comme toi a faire de gigantesques maps procédurales pourquoi pas faire les mêmes erreurs
Le truc qui me casse la tete c est de faire tourner l avion, qu il conserve ses forces en changeant de direction
Pour l instant quand on tourne, disons a droite, l avion se tourne vers la droite, mais glisse sur la gauche
Dans la réalité, ce sont les ailes qui empêchent de glisser vers la gauche , tandis si on tourne uniquement avec le palonnier on glisse
Il y a aussi l angle maximum auquel on peut tourner, la vitesse qui va se réduire, etc
Re: {DB-AL} Roulis d un avion
bien ton dernier code, enfin tu n'utilise que du rigiBody, et plus de mélange transform/rigidbody.
déjà pour les commandes qu'utilise tu? tout clavier? un gamePad? un vrai controleur ( manche + gaz + palonier)?
Le AngularDrag (drag aussi) devrait être une valeur fixe, et ne pas jouer avec pour pour compenser un mouvement.
Au pire tu defini Drag = 2.0f. et augment juste la valeur turn :
par exemple.
Mais au risque d’être chiant, fais 2-3 recherche google sur les force appliquée a un avion tu verra que : ton "turn" est aussi fonction du carrée de la vitesse ( si l'avion n'avance pas, tu peux toucher toute les commande rien ne se passera) par exemple.
Aussi, tout objet a une inertie ( plus ou moins difficile de le mettre en mouvement/rotation) qui est en fonction de sa masse et de la répartition de la masse par rapport au centre de gravité. et c'est un élément très important dans le maniement d'un avion.
Si tu veux bien, donne le code Complet pour ton avion, que je le test et t'en donne des conseils + explication si je peux
déjà pour les commandes qu'utilise tu? tout clavier? un gamePad? un vrai controleur ( manche + gaz + palonier)?
Le AngularDrag (drag aussi) devrait être une valeur fixe, et ne pas jouer avec pour pour compenser un mouvement.
Au pire tu defini Drag = 2.0f. et augment juste la valeur turn :
Code : Tout sélectionner
float turn = -Input.GetAxis("Horizontal")*2.0f;
Mais au risque d’être chiant, fais 2-3 recherche google sur les force appliquée a un avion tu verra que : ton "turn" est aussi fonction du carrée de la vitesse ( si l'avion n'avance pas, tu peux toucher toute les commande rien ne se passera) par exemple.
Aussi, tout objet a une inertie ( plus ou moins difficile de le mettre en mouvement/rotation) qui est en fonction de sa masse et de la répartition de la masse par rapport au centre de gravité. et c'est un élément très important dans le maniement d'un avion.
c'est très bien, je pense on fait tous ça, ou on l'as tous fait. l'important est pouvoir comprendre justement ces bout de code qu'on prend a droite a gauche. Par exemple si je te donne mon code pour ma génération de map, c'est génial ça va marcher pour toi, mais si tu ne le comprend pas tu va pas pouvoir l'adapter à tes besoins.Oui c est exactement ça, je prends des bouts de code a gauche et a droite, mais c est ma manière d apprendre
Si tu veux bien, donne le code Complet pour ton avion, que je le test et t'en donne des conseils + explication si je peux
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
-
- Messages : 92
- Inscription : 28 Mars 2018 01:26
- Localisation : Alpes - Suisse
Re: {DB-AL} Roulis d un avion
Ok, c est bien moins compliqué qu avant
Voici mon code en entier
Ah oui, pour l instant j ai juste un clavier
Voici mon code en entier
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlyControler2 : MonoBehaviour {
public float thrust;
public Rigidbody rb;
private float portanceAiles;
public float x; // Coefficiant de portance des ailes
public float torque;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
rb.mass = 1.0f;
rb.drag = 1.0f;
rb.angularDrag = 2.0f;
torque = 1;
thrust = 1;
}
// Update is called once per frame
void Update ()
{
Debug.Log("thrust : " + thrust);
Debug.Log("rb.velocity : " + rb.velocity);
Debug.Log("rb.velocity.magnitude : " + rb.velocity.magnitude);
float turn = -Input.GetAxis("Horizontal") * 2;
rb.AddTorque(transform.forward * torque * turn);
float pitch = Input.GetAxis("Vertical") * 2;
rb.AddTorque(transform.right * torque * pitch);
portanceAiles = Mathf.Sqrt(rb.velocity.magnitude) * x;
rb.AddRelativeForce(transform.forward * thrust * 10); // En avant
rb.AddForce(Vector3.up * portanceAiles); // vers le haut
// throttle
if (thrust < 101)
{
if (Input.GetButtonDown("throttle+"))
{
thrust = thrust + 20f;
}
}
if (thrust > 1)
{
if (Input.GetButtonDown("throttle-"))
{
thrust = thrust - 20f;
}
}
}
}
Re: {DB-AL} Roulis d un avion
Je suis en train de regarder ton code. Je te posterai ma "version" commentée demain je pense. Mais ce que je peux déja dire :
pour un rigidbody, les valeurs ont toute une unité, il est important d'avoir une cohérence.
- mass => poids en kg donc rb.mass = 1.0f => avion qui pese 1 seul kg.
- AddForce=> force en Newton(N) . 1kg = 9.81N.
- AddTorque => couple en N.m => 10N.m eviron 1kg au bout d'un bras de levier d'un mètre.
- unité => un mètre. transform.position = Vector3(0,1,0) => positionne ton transform a 1m au dessus du niveau 0.
- Velocity => Vecteur3 vitesse du rigiddbody, en m/s.
Donc que tout soit cohérent : dimension de l'avion, son poid.. pour avoir une échelle : un prefab cube : 1 m. x 1 m. x 1 m. un plane : 10 m x 10 m.
Edit :
Autre remarque je pense tu t'es mélanger : Mathf.Sqrt => Square root => raciné carée. Mathf.Sqrt(4) = 2.
dans ton cas pour la portance :
pour un rigidbody, les valeurs ont toute une unité, il est important d'avoir une cohérence.
- mass => poids en kg donc rb.mass = 1.0f => avion qui pese 1 seul kg.
- AddForce=> force en Newton(N) . 1kg = 9.81N.
- AddTorque => couple en N.m => 10N.m eviron 1kg au bout d'un bras de levier d'un mètre.
- unité => un mètre. transform.position = Vector3(0,1,0) => positionne ton transform a 1m au dessus du niveau 0.
- Velocity => Vecteur3 vitesse du rigiddbody, en m/s.
Donc que tout soit cohérent : dimension de l'avion, son poid.. pour avoir une échelle : un prefab cube : 1 m. x 1 m. x 1 m. un plane : 10 m x 10 m.
Edit :
Autre remarque je pense tu t'es mélanger : Mathf.Sqrt => Square root => raciné carée. Mathf.Sqrt(4) = 2.
dans ton cas pour la portance :
Code : Tout sélectionner
portanceAiles =rb.velocity.magnitude * rb.velocity.magnitude * x;
______________________________________________________________
\_______________________ Impossible is nothing _______________________/