Page 1 sur 1

[Resolu][DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 18:04
par EmileF
Bonjour,

J'ai une petit problème pour lequel je n'arrive pas à trouver une solution:

Dans mon jeu,
Mon player est équipé d'un rigidbody, pour la gravité.
et je peux le déplacer en cliquant sur le sol.
pour préciser sa position, ou reculer un peu je peux le déplacer avec la roulette de la souris,

Dans les déplacements vers le clic les collisions sont respectées, et mon player glisse le long des obstacles quand c'est possible pour contourner l'obstacle.

Par contre, à la commande avec la roulette, si j'arrive contre un obstacle, il continue son déplacement.

voici le script que j'utilise:

Code : Tout sélectionner

    private void FixedUpdate()
    {
        if (move)
        {
            //réveil
            rb.WakeUp();
            //respecte la position verticale du player. dest est la position cible à atteindre
            dest.y = transform.position.y;
            Vector3 dif = dest - transform.position;
            //si la distance est plus grande que 1 on avance simplement
            if (dif.magnitude > 1f)
                rb.MovePosition(transform.position + dif.normalized * speed * 0.2f * Time.deltaTime);
            else
            {
                //Si on est presque arrivé on amorti le déplacement
                rb.MovePosition(transform.position + dif * speed * Time.deltaTime);
                if (dif.magnitude < 0.2f)
                {
                    //quand on est arrivé, on précise la position et on stoppe
                    transform.position = dest;
                    move = false;
                }
            }
        }
        else
        {
            //si on actionne la roulette
            float rol = Input.GetAxis("Mouse ScrollWheel");
            if (rol != 0)
            {
                //réveil
                rb.WakeUp();
                //on déplace selon la valeur de la roulette. Je pense que c'est là que ça coince
                rb.MovePosition(transform.position + transform.forward * rol);
            }
        }
    }
J'ai mis quelques commentaires pour mieux me faire comprendre.
J'utilise MovePosition dans les 2 cas. Ce que je ne comprends pas c'est que les collisions sont respectées dans un cas et pas dans l'autre.

Si quelqu'un peut m'apporter quelque précision, ce serait avec plaisir.

merci

Re: [DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 19:03
par Max
Bonsoir,

je dirais que faire du set positon avec un RigidBody est toujours risqué.
Un ScrollWheel un peu "vif" face à un obstacle un peu mince et tu passes à travers.
Sur ton RB, l'Interpolate est comment ?

Re: [DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 19:12
par EmileF
Max a écrit :Sur ton RB, l'Interpolate est comment ?
Il est a None.

Je vais essayer les autres valeurs pour voir.

J'ai pensé à une chose, est-ce que ça ne pourrait pas venir que je suis en marche arrière est que l'obstacle n'est pas dans le champ de la caméra?

edit:
J'ai essayé les autres valeurs pour Interpolate et Collision Detection et le problème persiste.
Je n'ai pas précisé que la limite de la zone est un mesh modélisé avec Blender, qui fait le tour de la zone et qui est équipé avec un Mesh Collider. Mais ça marche bien en marche avant, je pense donc que le problème ne vient pas de là.

Re: [DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 19:22
par Max
EmileF a écrit :
12 Juin 2019 19:12
J'ai pensé à une chose, est-ce que ça ne pourrait pas venir que je suis en marche arrière est que l'obstacle n'est pas dans le champ de la caméra?
Normalement, quelque soit la direction prise par le RB, la réaction sera la même. Pour lui la marche arrière n'est qu'un déplacement comme un autre, à valeur négative (en quelque sorte).

Re: [DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 19:26
par EmileF
Ha, nos post se sont croisés, je disais

J'ai essayé les autres valeurs pour Interpolate et Collision Detection et le problème persiste.
Je n'ai pas précisé que la limite de la zone est un mesh modélisé avec Blender, qui fait le tour de la zone et qui est équipé avec un Mesh Collider. Mais ça marche bien en marche avant, je pense donc que le problème ne vient pas de là.

En fait :
J'avais réglé le Radius du Capsule Collider du player à 0.1, pour qu'il puisse passer dans des zones plus étroites, c'était là l'erreur.
En le remettant à 0.4 et en multipliant la force du ScrollWheel par 0.5, pour limiter sa violence, j'ai réglé à peu près le problème.
Il faut vraiment être violant sur la roulette pour qu'il traverse

Tu m'as mis sur la voie, merci Max.

Re: [DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 20:29
par Max
EmileF a écrit :
12 Juin 2019 19:26
J'avais réglé le Radius du Capsule Collider du player à 0.1, pour qu'il puisse passer dans des zones plus étroites, c'était là l'erreur.
effectivement, c'était vraiment bas. Il vaut mieux jouer sur la taille du décor plutôt que de trop baisser les valeurs du RB.
Après, tu parlais du MeshCollider de ton mesh constituant ta scène, il peut y avoir aussi une partie de la solution à ce niveau aussi ;)

Re: [Resolu][DB-AL]Rigidbody défaut de collision

Publié : 12 Juin 2019 21:17
par EmileF
Je te remercie Max,
En augmentant le radius et en divisant la force de la roulette, je suis arrivé a régler mon problème.
Quand au mesh qui me sert pour le mesh collider je pensais que c'était plus performant qu'une multitude de cubes(par exemple) pour ceinturer la zone.
J'ai préféré cette solution pour simplifier la ceinture que d'utiliser les décors trop compliqués et sûrement moins optimisé