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

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
EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

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

Message par EmileF » 12 Juin 2019 18:04

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
Dernière édition par EmileF le 12 Juin 2019 19:44, édité 1 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

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

Message par Max » 12 Juin 2019 19:03

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 ?
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

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

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

Message par EmileF » 12 Juin 2019 19:12

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à.
Dernière édition par EmileF le 12 Juin 2019 19:24, édité 1 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

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

Message par Max » 12 Juin 2019 19:22

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).
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

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

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

Message par EmileF » 12 Juin 2019 19:26

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.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

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

Message par Max » 12 Juin 2019 20:29

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 ;)
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

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

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

Message par EmileF » 12 Juin 2019 21:17

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é
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Répondre

Revenir vers « (C#) CSharp »