points de contact et normale d'une 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
Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

points de contact et normale d'une collision

Message par Kaloverian » 05 Déc 2021 02:24

bonjour,

J'essaie d'écrire un petit script simple qui me donne les points de contact et la normale au premier point de contact d'une collision entre un objet A à l'intérieur d'un objet B plus grand.C'est l'objet A qui se déplace à l'aide des touches grâce à un autre script.
Ce script ne retourne rien dans la console.au moment de la collision.
Pourquoi?Qu'ai-je oublié?

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class essai : MonoBehaviour
{
    public GameObject objB;
    public Collision objA;
   

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
      
    }

    void OnCollisionEnter(Collision objA)
    
    {
        ContactPoint[] contacts = new ContactPoint[10];

      
        print("nombre de points de contact: " + objA.contacts.Length);
        print("First normal of the point that collide: " + objA.contacts[0].normal);

    }

    

}


Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: points de contact et normale d'une collision

Message par jmhoubre » 05 Déc 2021 09:34

1) Quel objet a le rigidbody ?
2) ObjA est déclaré au début, mais c'est également le nom du paramètre de OnCollisionEnter. Du coup je ne sais pas trop quel objet est pris en compte dans objA.contacts.Length.

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: points de contact et normale d'une collision

Message par jmhoubre » 05 Déc 2021 22:37

Test rapide chez moi, cela fonctionne : j'ai 1 point de contact et sa normale.

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: points de contact et normale d'une collision

Message par Kaloverian » 06 Déc 2021 00:22

non je vois rien d'affiché dans la console.
Dans chaque Rigidbody,faut-il cocher is Kinemtic?
Dans chaque Box Collider,faut-il cocher Is Trigger?

Une capture d'écran de ce qui est affiché dans votre console à l'impact?

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: points de contact et normale d'une collision

Message par Kaloverian » 14 Déc 2021 23:23

j'ai compris d'où vient le problème
code corrigé

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class essai : MonoBehaviour
{
    public GameObject objB;
    public Collision objA;
   

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
      
    }

    void OnCollisionEnter(Collision objA)
    
    {
        ContactPoint[] contacts = new ContactPoint[10];

      
        Debug.Log("nombre de points de contact: " + objA.contacts.Length);
        Debug.Log("First normal of the point that collide: " + objA.contacts[0].normal);

    }

    

}

objet A et objet B ont un Rigidbody et un Box Collider(dont is Trigger décoché)

mais il réside un nouveau problème:
mon objet A est à l'intérieur de l'objet B.
Donc au début, il y a une collision (ce que je ne souhaite pas !)
Je veux qu'il y ait une collision lorsque l'objet A ne heurte que la surface de l'objet B
Comment puis-je ajouter une boîte de collision de l'objet B qui n'enveloppe que la surface de l'objet B ?

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: points de contact et normale d'une collision

Message par jmhoubre » 15 Déc 2021 00:03

Dans ton code objA est une collision. Que sont objet A et objet B ? Ne le sachant pas, j'ai du mal à imaginer pourquoi il y a une collision au début.
Tu as touché quelque chose dans les rigidbody ? Les coordonnées sur Oy des objets bougent en mode Play ?

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: points de contact et normale d'une collision

Message par Kaloverian » 15 Déc 2021 02:36

code encore modifié

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class normale_au_point_contact : MonoBehaviour
{
    
 
     public Collider thisCollider,otherCollider;
   


   

    Vector3 vect;

    int i;
   

    // Start is called before the first frame update
    void Start()
    {
     
    }

    // Update is called once per frame
    void Update()
    {
      
    }

    void OnCollisionEnter(Collision otherCollider)
    
    {
        ContactPoint[] contacts = new ContactPoint[10];
        

         
         
      

     //donne le nombre de points de contact 
    Debug.Log("nombre de points de contact: " + otherCollider.contacts.Length);
    
    //donne le vecteur normal au premier point de contact
    Debug.Log("First normal of the point that collide: " + otherCollider.contacts[0].normal);
    
    //donne le tag de thisCollider
    Debug.Log("le collisionneur est :"+thisCollider.gameObject.tag);
    
    //donne le tag de otherCollider
    Debug.Log("l'autre collisionneur est :"+otherCollider.gameObject.tag);
    
    //donne les coordonnées de chaque point de contact
    for(int i=0;i<otherCollider.contacts.Length;i++)
    {
        Debug.Log("point de contact "+i+" : "+contacts[i]);
        Debug.Log("vcoordonnées du point de contact "+i+" : ("+otherCollider.contacts[i].point.x+","+otherCollider.contacts[i].point.y+","+otherCollider.contacts[i].point.z+")");
         Debug.Log("---------------------------------------------");
    }

    }

    

}

objet A est thisCollider
objet B est otherCollider
j'attache ce script à objet A

Et là c'est plus clair ?
Si oui,je repose ma question précédente

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: points de contact et normale d'une collision

Message par jmhoubre » 15 Déc 2021 17:15

Bonjour,

merci de répondre à mes questions.
De plus, quand tu publies du code, prends soin de faciliter la tâche des lecteurs en vérifiant l'indentation, et en supprimant les lignes inutiles (non seulement les séries de lignes vides, mais également les fonctions vides).

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: points de contact et normale d'une collision

Message par Kaloverian » 15 Déc 2021 22:11

je pense avoir trouvé la solution à mon problème avec OnCollisionExit en s'inspirant de cette question non résolue:
https://answers.unity.com/questions/914 ... nexit.html

Répondre

Revenir vers « (C#) CSharp »