wake-up-neo.com

Kollisionserkennung funktioniert nicht als Einheit

Erstens weiß ich, dass diese Frage sehr oft gestellt wurde, aber ich kann keine Lösung finden, daher ist mein Problem: Ich mache ein Lernspiel, und ich habe eine Ader und den Blutfluss (mit vielen Boxcollidern) und ein einziges Blut Zelle (auch mit einem Box-Collider) Ich möchte jedoch, dass die Zelle zerstört wird, wenn sie den Wall Collider erreicht, aber sie bleibt nicht einfach dort, hier ist das Projekt!

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

(kann wegen meines guten Rufs keine Bilder hochladen, sorry)

Der Collider, bei dem ich meine Zelle zerstören möchte, ist der rosa Collider. Wenn er jedoch berührt wird, tut er einfach nichts, hier ist mein Skript

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

Hier ist auch das AddForce-Skript

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


    }
}

danke für Ihre Hilfe, Jungs! : D

3
user145708

Es kann mehrere Dinge geben:

  • RigidBody fehlt (am häufigsten). Mindestens eines der beteiligten GameObjects muss einen Rigid Body haben (prüfen Sie, ob mindestens eines von ihnen mit einem RigidBody verbunden ist und die Option "Is Kinematic" nicht aktiviert ist.)
  • Fehlendes Tag . Das GameObject from collision hat kein "Collider" -Tag (versuchen Sie, die if -Anweisung zu entfernen, um es zu testen) (um Tags zu vergleichen, verwenden Sie collider.gameObject.CompareTag("Collider"), es hat eine bessere Leistung)
  • Nicht erkennbare Kollision . Die Kollisionsmatrix für die Physik-Schicht ist so eingestellt, dass keine Kollision zwischen den Schichten, aus denen sich die Objekte befinden, erkannt wird (rufen Sie Bearbeiten> Projekt> Physik auf und prüfen Sie, ob die Begegnung der Schicht beider GameObjects in der Schicht-Kollisionsmatrix überprüft wird.)
  • Falsche Collider-Konfiguration . Bei einem oder beiden der GameObjects ist ein kleiner/falscher oder fehlender Collider vorhanden (prüfen Sie, ob beide über eine Collider-Komponente verfügen und ob ihre Größe korrekt ist).

Wenn es funktioniert, sollten Sie auf play drücken und ein GameObject in das andere ziehen können, und Ihr Debug.Log wird angezeigt.

Verwenden Sie Tagnamen, die die Gruppe der GameObjects, die Teil der Gruppe sein sollen, wie "RedCells" oder "WhiteCells", besser beschreiben. Es ist einfacher, die Layer-Kollisionsmatrix zu konfigurieren und die Leistung Ihres Spiels zu verbessern.

Noch ein Tipp: Für Colliders, die nur ein anderes GameObject zerstören (nicht reagieren, wie ein Stoß oder tatsächlich zusammenstoßen), benutze ich Auslöser. Auf diese Weise ändert die Kollision zwischen ihnen nichts am verbleibenden GameObject (wie Richtung/Geschwindigkeit/etc). Überprüfen Sie dazu den Is-Trigger im Collider und verwenden Sie OnTriggerEnter anstelle von OnCollisionEnter.

5
Kleber

in einigen Fällen haben Sie Ihrem Spielobjekt die Komponente Nav Mesh Agent hinzugefügt (zur automatischen Weiterleitung des Betriebs im Strategiespiel und ...). In diesem Fall kümmert sich dieses Spielobjekt nicht um den Collider. Wenn Sie dieses Nav Mesh Agent wirklich benötigen, sollten Sie Nav Mesh Obstacle zu einem anderen festen Spielobjekt hinzufügen und Nav Mesh Agenthinzufügen. _ zu einem anderen beweglichen Spielobjekt.

0
PedPak

Ich habe einige Folgefragen, die zu einer Lösung führen könnten. 

Hat das Objekt, das Ihr Kollisionsskript enthält, erstens einen starren Körper und einen Kollider? Zweitens: Hat die Wand einen starren Körper und einen Kollider?

Wenn diese Bedingungen erfüllt sind, funktionieren Kollisionen normalerweise. Ein paar andere Dinge, die das Problem sein könnten: 

  1. Überprüfen Sie, ob Sie für jedes Objekt einen Trigger überprüft haben, und stellen Sie sicher, dass es nicht markiert ist.
  2. Überprüfen Sie und stellen Sie sicher, dass die Starrkörper auf beiden nicht kinematisch sind.
0
Nick Crow

Ich habe es endlich behoben, ich weiß nicht wirklich, ob dies das Problem war, aber ich habe gerade den steifen Körper von den Eltern der Wand entfernt und es fing an zu arbeiten! behoben, vielen Dank für Ihre Hilfe! : D

0
user145708