[RESOLU]Mouvement de rotation dans un torus

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Exsize
Messages : 11
Inscription : 29 Avr 2020 21:16

[RESOLU]Mouvement de rotation dans un torus

Message par Exsize » 26 Juil 2020 11:43

Bonjour à tous.

Je commence un nouveau petit projet et pour vous expliquer mon problème je pense qu'il faut que je vous montre.

Voici une petite image de mon projet (ne faites pas attention aux matériaux c'est vraiment moche)
Image

J'aimerai que la capsule (qui sera à terme le joueur) tourne à l'intérieur du torus. Je pense que le script de déplacement ne sera pas compliqué car c'est un mouvement constant. Mais c'est au niveau de la gravité. J'aimerai que la capsule sois attiré par le torus en tout points.

Malgrès toute mes recherches je n'y arrive encre pas c'est pour cela que je fais appelle à vous.

Merci beaucoup si vous pouvez m'aider !
Dernière édition par Exsize le 27 Juil 2020 12:10, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mouvement de rotation dans un torus

Message par Max » 26 Juil 2020 13:43

Bonjour,

un sujet récent du forum qui pourrait pas mal t'aiguiller: viewtopic.php?f=2&t=17489
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Exsize
Messages : 11
Inscription : 29 Avr 2020 21:16

Re: Mouvement de rotation dans un torus

Message par Exsize » 26 Juil 2020 15:09

Bonjour.

Malgrès le code donné dans l'autre topic, impossible de faire bouger ma capsule à l'intérieur du torus. Néanmoins la gravité fonctionne tout autour du torus même si la capsule "tremble" un peu.

Auriez-vous une solution pour que la capsule se déplace toute seule dans le torus seulement sur l'axe x, y ?

Merci d'avance !

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mouvement de rotation dans un torus

Message par Max » 26 Juil 2020 15:25

Poste le code que tu utilises, cela peut servir de base et voir ce qui pourrait être corrigé pour que cela soit plus fonctionnel.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Exsize
Messages : 11
Inscription : 29 Avr 2020 21:16

Re: Mouvement de rotation dans un torus

Message par Exsize » 26 Juil 2020 15:49

Voilà voilà

Code : Tout sélectionner

public class MovementPlayer : MonoBehaviour
{
    public float speedMove = 4;     //vitesse de déplacement
    public float speedRot = 120;    //vitesse de rotation
    public float smoothRot = 10;    //amortissement dans les angles du sol
    public float jumpHeight = 1f;   //Hauteur pour le saut
    public float jumpForce = 40000; //Force pour le saut
    public float gravity = 50;      //Force pour la gravité
    bool onGround = false;
    float distanceToGround;
    Vector3 groundNormal;
    Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.freezeRotation = true;
    }


    private void FixedUpdate()
    {
        //Envoie un rayon verticalement vers le bas
        RaycastHit hit = new RaycastHit();
        Ray ray = new Ray(transform.position, -transform.up);

        //le layer 8 correspond à tout ce qui représente un "sol"
        int mask = 1 << 8;//ne réagit qu'au layer 8
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask))
        {
            //si le player est tout près du sol = true
            distanceToGround = hit.distance;
            onGround = distanceToGround < 0.1f;

            //applique la rotation pour que le player soit perpendiculaire au "sol"
            groundNormal = hit.normal.normalized;
            Quaternion targetRot = Quaternion.FromToRotation(transform.up, groundNormal) * transform.rotation;
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, smoothRot * Time.deltaTime);
        }
        else
            //on est dans le vide
            onGround = false;

        if (!onGround)
        {
            //si on touche pas le sol on applique la gravité
            rb.AddForce(groundNormal * -gravity);
        }
        else
        {
            //si on est au sol on peut sauter
            float j = Input.GetAxis("Jump");
            if (j != 0)
                rb.AddForce(transform.up * jumpForce * jumpHeight );

        }
        //et dans tous les cas on peut avancer
        float x = Input.GetAxis("Vertical") * Time.deltaTime * speedMove;
        transform.Translate(x, 0, 0);
    }
}

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mouvement de rotation dans un torus

Message par Max » 26 Juil 2020 16:31

petite question : as-tu besoin de la physique ? est-ce que cela fait parti de ton gameplay
Parce que sinon, si c'est juste pour déplacer une capsule à l’intérieur d'un torus, pas besoin de la physique, juste d'un peu de trigo ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Exsize
Messages : 11
Inscription : 29 Avr 2020 21:16

Re: Mouvement de rotation dans un torus

Message par Exsize » 26 Juil 2020 18:12

Malheureusement oui...

Le joueur va courir dans le torus et éviter des obstacles. La physique de mon jeu est dans le même style que le jeu « run around »

https://play.google.com/store/apps/deta ... rena&gl=FR

J’aurai peut être du commencer par là pour vous expliquez :?

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mouvement de rotation dans un torus

Message par Max » 26 Juil 2020 18:44

Dans ce cas, le code que tu fournis semble être une base de départ, moyennant quelques ajustements.
A la louche et en le reprennant:

Code : Tout sélectionner

   void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.useGravity = false;
        rb.constraints = RigidbodyConstraints.FreezeRotation;
    }


    private void FixedUpdate()
    {
        //et dans tous les cas on peut avancer
        float x = Input.GetAxis("Vertical") * Time.deltaTime * speedMove;
        transform.Translate(x, 0, 0);

        //Envoie un rayon verticalement vers le bas
        RaycastHit hit = new RaycastHit();
        Ray ray = new Ray(transform.position, -transform.up);

        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
        {
            //si le player est tout près du sol = true
            onGround = hit.distance < ((sizeCapsule/2.0f)+0.1f);

            //applique la rotation pour que le player soit perpendiculaire au "sol"
            groundNormal = hit.normal.normalized;
            Quaternion targetRot = Quaternion.FromToRotation(transform.up, groundNormal) * transform.rotation;
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, smoothRot * Time.deltaTime);
        }
        else
        {    //on est dans le vide
            onGround = false;
        }


        if (!onGround)
        {
            //si on touche pas le sol on applique la gravité
            rb.AddForce(groundNormal * -gravity);
        }
        else
        {
            //si on est au sol on peut sauter
            float j = Input.GetAxis("Jump");
            if (j != 0)
            { 
                rb.AddForce(transform.up * jumpForce);
                Debug.Log("JUMP");
            }

        }
    }
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Exsize
Messages : 11
Inscription : 29 Avr 2020 21:16

Re: Mouvement de rotation dans un torus

Message par Exsize » 27 Juil 2020 11:30

Merci de tes réponses !

Néanmoins ma capsule est seulement attiré par le torus donc la gravité marche mais la capsule ne se déplace pas autour. dès lors que la capsule touche le torus plus rien ne se passe. De plus il y a toujours ce petit tremblement de la capsule qui survient même quand cette dernière est dans les aires.

Tout cela est bien compliqué et peut être irréalisable en 3d je ne sais pas.

Je cherche moi aussi de mon coté une solution mais si tu as une idée je suis preneur !

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mouvement de rotation dans un torus

Message par Max » 27 Juil 2020 11:56

Bonjour,

je viens de tester vite fait, et cela fonctionne pas mal (code que j'ai posté plus haut). Peut-être une histoire de réglage de ton coté.
(après, gérer la physique, on le répète souvent, c'est pointu)

Image
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripting »