Page 2 sur 2

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 00:35
par Kaloverian
j'ai maintenant concocté un script permettant normalement de calculer la vitesse d'un objet.
Hélas,il ne fonctionne pas bien
Avant de le poster,je demande s'il existe une fonction dans l'API qui permet de récupérer la vitesse instantanée(en vecteur 3) d'un objet en mouvement

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 01:05
par jmhoubre
Si l'objet a un rigidbody, c'est sa vélocité.

S'il n'en a pas, tu peux la calculer dans l'update :
  • vitesse nulle -> return 0
  • calculer vitesse = (nouvelle position - ancienne position) / deltaTime
  • ancienne position = nouvelle position
  • return vitesse

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 14:48
par Kaloverian
....et pour obtenir l'accélération tangentielle de l'objet en mouvement?
son accélération normale?

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 17:00
par boubouk50
a=dv/dt - L'accélération est la dérivée de la vitesse, c'est à dire, la vitesse par unité de temps.
il suffit de regarder les unités.
v = m/s (mètre par seconde)
a = m/s² (mètre par seconde au carré)
Donc
a = v/t

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 17:54
par Kaloverian
oui je sais ceci en théorie
mais je demande s'il existe des fonctions de l'API qui fournissent ces accélérations(en tant que vecteur3)

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 18:43
par boubouk50
Une accélération sera un float pas un Vecteur3, c'est une valeur, pas une direction.
Donc ta demande n'est peut pas la bonne.

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 22 Mars 2023 19:20
par Kaloverian
en physique,l'accélération est un vecteur

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 23 Mars 2023 09:30
par boubouk50
Si elle est un vecteur, alors c'est que la valeur de l'accélération est multipliée par le vecteur directionnel normalisé. Pareil pour la vélocité (vitesse).
Il te suffit donc de calculer le vecteur directionnel et de le normaliser puis de le multiplier par l'accélération qui est la dérivée de la vélocité dans le temps.
Mais non, je ne sais pas si une API te la calcule pour toi. Heureusement, il y a internet:
https://answers.unity.com/questions/148 ... curat.html
https://gamedev.stackexchange.com/quest ... s-massless

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 25 Mars 2023 03:13
par Kaloverian
pour répondre à mhoubre qui me dit:
"Si l'objet a un rigidbody, c'est sa vélocité"

Ben non,la preuve d'après ce petit script:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//code non OK

public class deviation : MonoBehaviour
{
    public GameObject obj;
    Rigidbody rt;
    Vector3 veloc;
    // Start is called before the first frame update
    void Start()
    {
        obj.AddComponent<Rigidbody>();
        

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.I))
        {   obj.transform.Rotate(0,30,0);
            rt=obj.GetComponent<Rigidbody>();
            veloc=rt.velocity;
            print("direction: ("+veloc.x+","+veloc.y+","+veloc.z+")");




         }
         obj.transform.Translate(Vector3.right*Time.deltaTime);
    }
}

A chaque appui de la touche I,direction=(0,0,0) alors que l'objet dévie sur sa translation.
Peut-on me corriger ce petit script por que direction ne soit pas toujours Vector3.zero?

Re: détermination de la direction d'un mouvement rectiligne d'un objet

Publié : 27 Mars 2023 08:58
par boubouk50
Kaloverian a écrit :
25 Mars 2023 03:13
pour répondre à mhoubre qui me dit:
"Si l'objet a un rigidbody, c'est sa vélocité"

Ben non,la preuve d'après ce petit script:
Si tu fabriques toi même les preuves... Ce script n'est pas bon.
JMHoubre a raison, la vitesse directionnelle d'un rigidbody est sa vélocité. Pour avoir la vélocité, il faut passer par le rigidbody pour les transformations. tu ne peux pas faire ça:

Code : Tout sélectionner

obj.transform.Translate(Vector3.right*Time.deltaTime);
Mais utiliser les transformations depuis le rigidbody. Regarde la documentation du rigidbody (je n'ai que de la théorie).
Passer par les AddForces ou MovePosition.

Maintenant, si tu colles un rigidbody sur l'objet uniquement pour connaître la vitesse, autant ne pas le mettre et la calculer toi-même. Vitesse = distance / temps. Donc à l'instant t, elle vaut le déplacement que tu lui donnes divisé par le deltaTime, sinon, tu peux prendre plus large (et plus lissé) en calculant la distance parcourue 1 fois par seconde.