web-dev-qa-db-fra.com

La détection de collision ne fonctionne pas l'unité

Premièrement, je sais que cette question a souvent été posée, mais je ne trouve pas de solution. Mon problème est de créer un jeu éducatif. J'ai une veine et un flux sanguin (avec de nombreux collisionneurs de boîtes) et un seul sang. cellule (également avec un collisionneur de boîte) mais je veux que la cellule soit détruite quand elle atteint le collisionneur de mur, mais elle ne reste pas là, voici le projet!

http://tinypic.com/r/10706es/9

(impossible de télécharger des images à cause de ma réputation, désolé)

Le collisionneur sur lequel je veux détruire ma cellule est le collisionneur rose, mais quand il le touche, il ne fait rien, voici mon scénario

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

public class collision : MonoBehaviour {
    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void OnCollisionEnter(Collision col)
    {
        print("hihi");
        if (col.gameObject.tag == "Collider")
        {
            Destroy(gameObject);
        }
    }
}

Aussi, voici le script AddForce

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

public class AddForce : MonoBehaviour {

    public float thrust;
    public Rigidbody rb;
    private Vector3 up;
    private bool move;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        up = new Vector3(0, 1, 0);
        move = false;
    }

    void FixedUpdate()
    {
        if (Input.GetKey("space"))
        {
            if (rb.velocity.magnitude < 5)
                rb.AddForce(up * thrust);
            move = true;
        }

        else
        {
            if (move == true)
                rb.velocity = new Vector3(0, -0.5F, 0);
        }


    }
}

merci pour votre aide les gars! :RÉ

3
user145708

Il peut y avoir plusieurs choses:

  • RigidBody manquant (le plus commun). Au moins un des objets de jeu impliqués doit avoir un corps rigide (vérifiez si au moins l'un d'entre eux a un corps rigide attaché et que la case "Est cinématique" n'est pas cochée)
  • Balise manquante . Le GameObject from collision n'a pas de balise "Collider" (essayez de supprimer l'instruction if pour le tester) (pour comparer les balises, utilisez collider.gameObject.CompareTag("Collider"), ses performances sont meilleures)
  • Collision indétectable . La matrice de collision de la couche physique est définie pour ne pas détecter la collision entre les couches des objets (saisissez Edition> Projet> Phisiques et vérifiez si la rencontre de la couche des deux GameObjects est cochée dans la matrice de collision des couches).
  • Mauvaise configuration du collisionneur . l'un ou les deux des GameObjects ont un collisionneur petit/mal placé ou absent (vérifiez s'ils ont tous les deux un composant Collider et si leur taille est correcte)

Si cela fonctionne, vous devriez pouvoir appuyer sur play et faire glisser un GameObject dans l’autre et votre Debug.Log apparaîtra.

Comme conseil, utilisez des noms de balises qui décrivent mieux le groupe de GameObjects qui en fera partie, tels que "RedCells" ou "WhiteCells". Il sera plus facile de configurer la matrice de collision de couches et d’améliorer les performances de votre jeu.

Un autre conseil: pour les collisionneurs qui détruisent simplement un autre GameObject (ne réagissez pas, comme si vous heurtiez ou heurtiez réellement), j'utilise des déclencheurs. De cette façon, la collision entre eux ne modifiera rien dans le GameObject restant (comme direction/vélocité/etc). Pour ce faire, cochez la case Is Trigger dans le collisionneur et utilisez OnTriggerEnter au lieu de OnCollisionEnter.

5
Kleber

quelques fois, vous avez ajouté Nav Mesh Agent composant à votre objet de jeu (pour autoriser le fonctionnement en mode de jeu stratégique et ...). Dans ce cas, cet objet de jeu n'assiste pas au collisionneur. ____.] Donc, si vous avez vraiment besoin de ce Nav Mesh Agent , vous devez ajouter Nav Mesh Obstacle à un autre objet du jeu fixe et également ajouter Nav Mesh Agent à un autre objet du jeu amovible.

0
PedPak

J'ai quelques questions de suivi qui pourraient mener à une solution. 

Premièrement, l’objet contenant votre script 'collision' a-t-il un corps rigide et un collisionneur? Deuxièmement, le mur a-t-il à la fois un corps rigide et un collisionneur?

Habituellement, si ces conditions sont remplies, les collisions fonctionneront. Quelques autres problèmes qui pourraient poser problème: 

  1. Vérifiez si istrigger a vérifié l'un ou l'autre des objets et assurez-vous qu'il n'est pas coché.
  2. Vérifiez et assurez-vous que les corps rigides des deux ne sont pas cinématiques.
0
Nick Crow

J'ai finalement résolu le problème, je ne sais pas vraiment si c'était le problème, mais j'ai simplement retiré le corps rigide du parent du mur et cela a commencé à fonctionner! Je ne sais pas ce que le corps rigide a fait, mais le problème était simplement corrigé, merci à tous pour votre aide! :RÉ

0
user145708