2013-12-13 10 views
7

aufgerufen Ich habe fast jede Antwort dafür überprüft, aber das waren meist einfache Fehler und Fehler. Mein Problem ist, dass OnCollisionEnter nicht aufgerufen wird, wenn Sie mit anderen Starrkörper kollidieren.OnCollisionEnter wird nicht in Einheit

hier ist der Teil, was nicht aufgerufen wird:

void OnCollisionEnter(UnityEngine.Collision col) { 
     Debug.Log("collision!!!"); 
     foreach(ContactPoint contact in col.contacts) { 
      //checking the individual collisions 
      if(contact.Equals(this.target)) 
      { 
       if(!attacking) { 
        Debug.Log("hitting target"); 
       } else { 
        Debug.Log("dying"); 
        //engage death sequence 
       } 
      } 
     } 
    } 

Nicht einmal die „Kollision !!!“ Nachricht erscheint. Verstehe ich die Verwendung falsch oder habe ich etwas vergessen?

+0

auch die an das Objekt angeschlossenen Komponenten: transform; Sprite-Renderer; Kastencollider 2D; Kreis Collider 2D; feindlicher Controller (Skript); Starrkörper 2D; Animator; –

+1

Bitte [bearbeiten Sie Ihren Beitrag] (http://stackoverflow.com/posts/20567692/edit), um diese Informationen hinzuzufügen, fügen Sie sie nicht als Kommentar hinzu, da sie möglicherweise übersehen wird. – Dave

+0

Der OnCollisionEnter wird nicht aufgerufen, wenn Sie benutze einen characterController. Das hat seine eigene Kollisions-Methode (ich kann es im Moment nicht nachschlagen). –

Antwort

32

sind. Wenn dem so ist diese Funktion anstelle von OnCollisionEnter

void OnCollisionEnter2D(Collision2D coll) 
    { 
     Debug.Log(coll.gameObject.tag); 

    } 
+0

DANKE SO VIEL FÜR DIESES! – Torch2424

+0

Vielen Dank, Mann! – dharmesh

1

Sie müssen sicherstellen, dass die Kollisionsmatrix (Bearbeiten-> Projekteinstellungen-> Physik) Kollisionen zwischen den Ebenen, zu denen Ihre Objekte gehören, nicht ausschließt.

Unity Docs

Sie müssen auch sicherstellen, dass das andere Objekt hat: Collider, Starrkörper und dass das Objekt selbst oder eine dieser Komponenten nicht deaktiviert.

+4

Ich habe am Ende herausgefunden, dass für 2D-Kollisionen die Methode OnCollisionEnter2D (Collision2D col) verwendet werden muss. –

+0

Ja das auch: D – Alex

1

dieses 2D-Beschleunigern und rigidbodies mit ?? Versuchen

http://docs.unity3d.com/Documentation/ScriptReference/Collider.OnCollisionEnter.html

using UnityEngine; 
using System.Collections; 

public class Example : MonoBehaviour { 
    void OnCollisionEnter(Collision collision) { 

    foreach (ContactPoint contact in collision.contacts) { 
     Debug.DrawRay(contact.point, contact.normal, Color.white); 
    } 

    if (collision.relativeVelocity.magnitude > 2){ 
     audio.Play();   
    } 

    } 
} 
1

Hier ist, was ich tue:

  1. sicherstellen, dass das Objekt, mit Ziel kollidieren wollen hat nicht-kinematische Starrkörper und Collider ineinander greifen. Mein Hitter-Objekt ist ein Würfel und ändert nur seinen Collider zu Mesh Collider
  2. Auf Mesh-Kolider Inspector stellen Sie sicher, dass Sie konvex aktivieren. Bitte sehen Sie mehr Mesh Collider Inspektor Detail here

Jetzt funktioniert Ihr OnCollisionEnter. Ich hoffe das hilft dir.

0

weil Sie den Klassennamen des Parameters falsch eingegeben haben. das macht keinen fehler auch nicht funktioniert. zB:

OnCollisionEnter(Collider other) //this is wrong 
OnCollisionEnter(Collision other) //this is correct 
0

Sie müssen nur Skript auf das gleiche Objekt anhängen, deren Notwendigkeit erkennt die Kollision.