Page 1 sur 2

Faire tourner un personnage autour d'un axe

Publié : 13 Mai 2021 23:45
par siriusraine
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

    }

Re: Faire tourner un personnage autour d'un axe

Publié : 17 Mai 2021 17:06
par Max
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.

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 08:28
par siriusraine
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

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 10:49
par Max
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 ?

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 11:11
par siriusraine
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 )

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 11:33
par Max
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 ?

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 11:49
par siriusraine
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

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 13:01
par Max
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...).

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 13:57
par siriusraine
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

Re: Faire tourner un personnage autour d'un axe

Publié : 19 Mai 2021 14:20
par Max
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().