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

Pour les scripts écrits en C#
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
Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

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

Message par Kaloverian » 22 Mars 2023 00:35

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

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 22 Mars 2023 01:05

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

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

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

Message par Kaloverian » 22 Mars 2023 14:48

....et pour obtenir l'accélération tangentielle de l'objet en mouvement?
son accélération normale?

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

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

Message par boubouk50 » 22 Mars 2023 17:00

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
"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
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

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

Message par Kaloverian » 22 Mars 2023 17:54

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)

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

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

Message par boubouk50 » 22 Mars 2023 18:43

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.
"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
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

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

Message par Kaloverian » 22 Mars 2023 19:20

en physique,l'accélération est un vecteur

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

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

Message par boubouk50 » 23 Mars 2023 09:30

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
"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
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

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

Message par Kaloverian » 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:

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?

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

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

Message par boubouk50 » 27 Mars 2023 08:58

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.
"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 « (C#) CSharp »