IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

Détecter une collision qui n'est pas générée par le moteur physique


Sujet :

Unity

  1. #1
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 75
    Points : 289
    Points
    289
    Par défaut Détecter une collision qui n'est pas générée par le moteur physique
    Bonjour,

    J'aimerais savoir s'il est possible de détecter via un script une collision entre deux colliders, même si cette collision n'est pas générée par le moteur physique.

    Lorsqu'une collision est générée par le moteur physique, j'utilise les fonctions OnCollisionEnter ou OnTriggerEnter.

    Mais ici, je déplace mon GameObject avec un script, et il n'a pas de RigidBody. Existe-il un moyen de détecter ce genre de collisions ?

    Pour information, j'utilise le JavaScript.

    Merci.

  2. #2
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Les events de type OnCollisionEnter ne réagissent qu'a partir de rigidbody.

    Citation Envoyé par Cosinus(x) Voir le message
    Existe-il un moyen de détecter ce genre de collisions ?
    Un système de Raycast dans ce cas ? Et surtout, tout dépend ce que tu cherches à faire, il faudrait en dire plus.

  3. #3
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 75
    Points : 289
    Points
    289
    Par défaut
    Bonjour Greg Latiner, merci pour cette réponse rapide.

    Je cherche à placer un objet sur un terrain en fonction de la position de la souris.

    Pour l'instant, une partie de mon code ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    var cameraRay : Ray;
    var hit : RaycastHit;
    private var currentObject : GameObject;
     
    private var isObjectOk : boolean = false;
     
    function Update(){
     
        if(!isObjectOk){
     
            cameraRay = camera.ScreenPointToRay(Input.mousePosition);
     
            //Position au niveau de la souris sur le terrain
            if(Physics.Raycast(cameraRay, hit) && hit.transform.name == "Terrain"){
     
                currentObject.transform.position = hit.point;
     
            }
     
            //On place l'objet définitivement
            if(Input.GetButtonDown("Fire1")){
     
                isObjectOk = true;
     
            }
     
        }
     
    }
    J'aimerais vérifier si currentObject n'est pas en collision avec un autre objet placé auparavant.

    Un système de Raycast dans ce cas ?
    Je n'y avais pas pensé, je vais essayer dans cette direction.

  4. #4
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Citation Envoyé par Cosinus(x) Voir le message
    J'aimerais vérifier si currentObject n'est pas en collision avec un autre objet placé auparavant.
    Arf, je comprend mieux ton soucis.
    Dans ce cas, regarde du coté de fonctions comme SphereCast ou éventuellement OverlapSphere, c'est plutôt pas mal pour ce genre de chose

  5. #5
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 75
    Points : 289
    Points
    289
    Par défaut
    J'ai utilisé OverlapSphere et ça solutionne plutôt bien mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    var cameraRay : Ray;
    var hit : RaycastHit;
    private var currentObject : GameObject;
     
    private var isObjectOk : boolean = false;
     
    private var isPlaceFree : boolean = false;
     
    function Update(){
     
        if(!isObjectOk){
     
            cameraRay = camera.ScreenPointToRay(Input.mousePosition);
     
            //Position au niveau de la souris sur le terrain
            if(Physics.Raycast(cameraRay, hit) && hit.transform.name == "Terrain"){
     
                currentObject.transform.position = hit.point;
     
            }
     
            var hitColliders = Physics.OverlapSphere(currentObject.transform.position, 5.1);
     
            if(hitColliders.Length > 2){
     
    	    //On ne peut pas placer l'objet
    	    isPlaceFree = false;
     
    	    for(var i = 0; i < currentObject.renderer.materials.Length; i++){
     
    	        currentObject.renderer.materials[i].color = Color.red;
     
    	    }
     
    	}else{
     
    	    //On peut placer l'objet
    	    isPlaceFree = true;
     
    	    for(var j = 0; j < currentObject.renderer.materials.Length; j++){
     
    	        currentObject.renderer.materials[j].color = Color.green;
     
    	    }
     
            }
     
            //On place l'objet définitivement
            if(Input.GetButtonDown("Fire1") && isPlaceFree){
     
                isObjectOk = true;
     
                for(var k = 0; k < currentObject.renderer.materials.Length; k++){
     
    	        currentObject.renderer.materials[k].color = Color.white;
     
    	    }
     
            }
     
        }
     
    }
    Je vérifie si le nombre de colliders est supérieur à 2 car il y a constamment le terrain et le collider de l'objet currentObject.
    Pour le reste, je modifie juste la couleur de mon objet.

    Merci à Greg Latiner.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détecter un bug qui n'est pas visible par tous
    Par Droïde Système7 dans le forum Débuter
    Réponses: 9
    Dernier message: 01/04/2009, 19h17
  2. Réponses: 8
    Dernier message: 18/01/2007, 21h01
  3. Réponses: 3
    Dernier message: 01/06/2006, 16h26
  4. Trouver une valeur qui n'est pas dans un champ
    Par eric41 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2006, 16h48
  5. lien dessus une images qui n'est pas en background
    Par tiyolx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/03/2006, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo