FixedUpdate et fixedDeltaTime

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
Yugo
Messages : 24
Inscription : 12 Nov 2018 15:22

FixedUpdate et fixedDeltaTime

Message par Yugo » 11 Jan 2019 12:03

Salut
J'ai bien lu la doc et regardé des tutos mais j'ai toujours du mal à comprendre et je ne suis pas sûr de bien faire.
Les objets dans ma scène ont tous un rigidbody.
J'ai donc mis tous mon script dans la FixedUpdate que se soit :

Code : Tout sélectionner

vaisseauMere.transform.position += vaisseauMere.transform.forward * vitesse * Time.fixedDeltaTime;
vaisseauMere.transform.Rotate(Vector3.up * Input.GetAxis("Mouse X")*0.5f * Time.fixedDeltaTime);
ou

Code : Tout sélectionner

        if (Input.GetKey(KeyCode.Z)) 
        {
            targetVitesse += 0.5f;
            targetVitesse = Mathf.Clamp(targetVitesse, 0, vitesseMax);
        }
ou encore

Code : Tout sélectionner

vitesse = Mathf.Lerp(vitesse, targetVitesse, 0.1f);
Apres avoir rajouter "* Time.fixedDeltaTime" le vaisseau est d'une lenteur extrême.
Est ce que c'est bien comme ça qu'il faut procéder ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: FixedUpdate et fixedDeltaTime

Message par boubouk50 » 11 Jan 2019 12:19

je te répondrai que s'il est lent, c'est qu'il faut augmenter sa vitesse...

Le fixedDeltaTime permet d'avoir une vitesse indépendante du framerate donc constante quel que soit celui-ci. Il est faible, car à 60fps il correspond à 1/60 = 0.01666.

Autre chose, pour un déplacement physique, il faut utiliser les forces (AddForce par ex) et donc passer par le FixedUpdate (). Tu utilises le Transform, donc FixedUpadate () ou Update (), même combat.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Yugo
Messages : 24
Inscription : 12 Nov 2018 15:22

Re: FixedUpdate et fixedDeltaTime

Message par Yugo » 11 Jan 2019 13:15

Ok j'y vois plus clair déjà!
Donc je vais tout remettre en Update alors.
Si j'ai bien compris la FixedUpdate n'est pas pour les RigidBody mais pour les RigidBody qui utilse des forces comme addForce addTorque...
Cela dit, j'ai un code pour arrêter les forces induites après une collision :

Code : Tout sélectionner

        if (vaissInfo.contrainteOn)
        {
            contrainteVelocityStart = Vector3.Lerp(contrainteVelocityStart,Vector3.zero , 0.005f);
            contrainteAngleStart = Vector3.Lerp(contrainteAngleStart, Vector3.zero, 0.005f);
            vaissRB.velocity = contrainteVelocityStart;          
            vaissRB.angularVelocity = contrainteAngleStart;
            if (vaissRB.velocity == Vector3.zero && vaissRB.angularVelocity == Vector3.zero) { vaissInfo.contrainteOn = false; }
        }
        
Est ce que se code doit se trouver dans la FixedUpdate car il touche à velocity et angularVelocity ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: FixedUpdate et fixedDeltaTime

Message par boubouk50 » 11 Jan 2019 14:42

Déjà la doc en vidéo:
https://unity3d.com/fr/learn/tutorials/ ... ixedupdate
et une explication (anglaise) du schmilblick
https://answers.unity.com/questions/109 ... updat.html

Je ne suis pas expert en physique de jeu, mais faire du physique et du non-physique sur le même objet n'est pas recommandé. Il risque d'y avoir des conflits.
Le rigidbody devrait être associé à la physique donc être utilisé dans le FixedUpdate ().
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Unity le logiciel »