Page 1 sur 1

FixedUpdate et fixedDeltaTime

Publié : 11 Jan 2019 12:03
par Yugo
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 ?

Re: FixedUpdate et fixedDeltaTime

Publié : 11 Jan 2019 12:19
par boubouk50
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.

Re: FixedUpdate et fixedDeltaTime

Publié : 11 Jan 2019 13:15
par Yugo
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 ?

Re: FixedUpdate et fixedDeltaTime

Publié : 11 Jan 2019 14:42
par boubouk50
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 ().