Faire tourner un personnage autour d'un axe

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
siriusraine
Messages : 34
Inscription : 01 Mars 2017 21:53

Faire tourner un personnage autour d'un axe

Message par siriusraine » 13 Mai 2021 23:45

Bonsoir
Mon probleme se rapproche d'un sujet pas tres vieux mais comme il est résolu j'ai préferé creer un nouveau topic

je souhaiterais faire courir un personnage autour d'un axe défini en gardant toujours la même distance entre les deux.
J'ai testé différentes solutions mais chacune avait des défauts rédhibitoires

si je gère mon perso avec un characterController le fait de mettre une force pour le deplacer va le faire sortir de l'orbite que je souhaite garder
si je gere plus simplement avec un transform.translate le character a pas d'inertie donc des que je saute c'est soit que a la vertical soit jai un "controle" totale de la direction pendant le saut

je vous mets le code que jutilise actuellement mais qui marche pas terrible

Code : Tout sélectionner

void Start()
    {
        //Fetch the Rigidbody from the GameObject with this script attached
        m_Rigidbody = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        if (Input.GetButton("Jump") && auSol)
        {
            //Apply a force to this Rigidbody in direction of this GameObjects up axis
            m_Rigidbody.AddForce(transform.up * m_Thrust, ForceMode.Impulse);
            Debug.Log("jump");
        }
        

        #region rotation autour du point centrale

        // calcul orientation vers le centre
        Vector3 dir = centerTarget.transform.position - this.transform.position;
        Quaternion look = Quaternion.LookRotation(dir);
        Vector3 rotation = look.eulerAngles;

        this.transform.rotation = Quaternion.Euler(0f, rotation.y, 0f);

        #endregion
        if(Input.GetAxis("Horizontal") != 0 && auSol)
        {
            transform.Translate(Vector3.right * Time.deltaTime * m_Thrust, Camera.main.transform);
        }
        transform.position = (transform.position - centerTarget.transform.position).normalized * distance + centerTarget.transform.position; // sert a se maintenir a *distance du centre

    }

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

Re: Faire tourner un personnage autour d'un axe

Message par Max » 17 Mai 2021 17:06

Bonjour,
siriusraine a écrit :
13 Mai 2021 23:45
si je gère mon perso avec un characterController le fait de mettre une force pour le déplacer va le faire sortir de l'orbite que je souhaite garder
C'est quoi ton objectif. Déplacer ton personnage sur une sphère par exemple ?
Si c'est le cas, il existe pas mal de ressources sur le sujet, comme par exemple ICI ou encore (ancien, mais les principes ne changent pas).
sinon, développe un peu plus.
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

siriusraine
Messages : 34
Inscription : 01 Mars 2017 21:53

Re: Faire tourner un personnage autour d'un axe

Message par siriusraine » 19 Mai 2021 08:28

bonjour

petite image explicative :

Image


jaimerais garder le characontroller pour pas avoir a tous recoder mais si il est impossible de le faire je referais le code tant pis

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

Re: Faire tourner un personnage autour d'un axe

Message par Max » 19 Mai 2021 10:49

siriusraine a écrit :
19 Mai 2021 08:28
jaimerais garder le characontroller pour pas avoir a tous recoder mais si il est impossible de le faire je referais le code tant pis
je comprend. Mais ce qui est bizarre c'est que dans le code que tu listes plus haut tu passes par le RigidBody.
J'aurais plutôt tendance à passer par les fonctions de contrôle du CharacterController, non ?
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

siriusraine
Messages : 34
Inscription : 01 Mars 2017 21:53

Re: Faire tourner un personnage autour d'un axe

Message par siriusraine » 19 Mai 2021 11:11

Max a écrit :
19 Mai 2021 10:49
je comprend. Mais ce qui est bizarre c'est que dans le code que tu listes plus haut tu passes par le RigidBody.
J'aurais plutôt tendance à passer par les fonctions de contrôle du CharacterController, non ?

jai essaye de passer par le Characontroller mais ca marche encore moins bien ( ce que jai mis plus haut comme code c'est celui que j'utilise " temporairement" pour pouvoir avancer un peu )
par exemple en saut mon perso decroche completement de l'orbite
si je maintiens une direction trop longtemps "l'inertie " va pareil me faire decrocher de l'orbite
je me doute que ca vient d'un probleme de vecteur dapplication de force mais je nai pas le niveau en math pour calculer le vecteur de force a appliquer ( ca doit sapprocher de la tangente de l'orbite plus un petit decalage vers l'interieur pour compenser l'inertie suivant la vitesse et la je parle que au sol car en saut c'est encore pire )

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

Re: Faire tourner un personnage autour d'un axe

Message par Max » 19 Mai 2021 11:33

Ok, si je comprends bien, tu as deux contrôles possible sur ton personnage: il peut sauter et accélérer/ralentir ?
C'est bien cela ?
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

siriusraine
Messages : 34
Inscription : 01 Mars 2017 21:53

Re: Faire tourner un personnage autour d'un axe

Message par siriusraine » 19 Mai 2021 11:49

en terme de deplacement il a plusieurs types de controles :

avancer ( il recule pas il fait demi-tour )
sauter / double saut / saut avec appuie
se baisser/glisser ( suivant la vitesse de deplacement )
* en oubliant pas que cela doit se faire sur un mouvement orbital

il pourra en plus se cacher derriere des decors

en gros tous les types de d'actions que lon pourrait faire dans un scroller horizontal normal mais avec une notion d'orbite pour changer un peu

sachant que en mode normal jai pas de probleme pour le faire c'est juste l'orbital move qui me bloque

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

Re: Faire tourner un personnage autour d'un axe

Message par Max » 19 Mai 2021 13:01

Hmm.
Perso, je partirais sur un controle en bout de frame pour le chemin circulaire, un truc pour une base de travail genre:

Code : Tout sélectionner

    void LateUpdate()
    {
        CirclePath();
    }


    // call this function in LateUpdate
    void CirclePath()
    {
        Vector3 deltaPos = transform.position - target.position;
        float rot = speed * Time.deltaTime;
        Vector3 newPos = Quaternion.Euler(0, rot, 0) * deltaPos;
        Vector3 newDir = newPos - deltaPos;
        m_CharacterController.Move(newDir);
        m_CharacterController.transform.Rotate(0, rot, 0);
    }
Après, dans l'Update et FixedUpdate tu code les mouvement de ton personnage (saut, changement de sens, etc...).
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

siriusraine
Messages : 34
Inscription : 01 Mars 2017 21:53

Re: Faire tourner un personnage autour d'un axe

Message par siriusraine » 19 Mai 2021 13:57

c'est le code que jai deja essayer

comme dit precedement le saut ne marche pas en orbital et le mouvement mis en place comme ca est un mouvement qui va donner une inertie qui va desorbiter le personnage

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

Re: Faire tourner un personnage autour d'un axe

Message par Max » 19 Mai 2021 14:20

j'ai essayé vite fait, et non, cela reste bien sur la trajectoire circulaire à priori.
Attention, il est important que le code soit appelé comme ci-dessus dans LateUpdate().
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 »