2016-05-31 19 views
0

Ich arbeite an einem sehr kleinen Unity 5.4 Projekt, ich habe mehrere "pellets" welche in der Spielwelt einen 2D und 2D Polygon Collider haben. Ich habe dann auch einen Ball, der einen starren Körper 2D, Polygon Colider und auch ein Physik-Material hat, das den Ball in andere Objekte springen lässt.Unity 3D 5.4 2D-Kollisionen funktionieren nicht?

Der folgende Code ist an ein Skript auf dem Ball würde etwas ... etwas tun, wenn es die grünen Pellets trifft, aber nichts passiert. Ich möchte nicht, dass die Anwendung beendet wird, das war nur zum Beispiel.

Nachfolgend sind die Eigenschaften beider Objekte:

enter image description here

public class BallBounce : MonoBehaviour { 

    // Use this for initialization 
    void Start() { 
     //activate camera because I am lazy 
     var cam = GameObject.Find ("camera"); 
     var ball = GameObject.Find ("ball"); 
     Rigidbody2D rb = GetComponent<Rigidbody2D>(); 
     cam.SetActive (true); 
        } 

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

    void OnCollisionEnter2D(Collision2D col) 
    { 
     if (col.gameObject.tag == "Bricks") { 
      Application.Quit(); 
     } 

    } 
} 
+0

die Anwendung verwenden. Quit() funktioniert nicht im Editor. Sie müssen Ihr Spiel erstellen und es als eigenständiges Programm starten, damit die Anwendung beendet wird. – Matriac

+0

Hey danke. Habe ich es zu versuchen und zerstören die Steine ​​es in Berührung kommt, sondern auch tut nichts: Aktualisiert Code: –

+0

Leere OnCollisionEnter2D (Collision2D col) \t { \t \t if (col.gameObject.tag \t == \t " Bricks ") \t \t \t Zerstören \t (col.gameObject); \t \t} –

Antwort

0

Application.Quit(); nicht im Editor funktioniert. Es wird für eigenständiges Build verwendet. Ersetzen Sie, dass mit UnityEditor.EditorApplication.isPlaying = false;

Nun, wenn Sie es wollen sowohl in Editor und unabhängigem Buildsystem arbeiten:

void Start() 
{ 
    //activate camera because I am lazy 
    var cam = GameObject.Find ("camera"); 
    var ball = GameObject.Find ("ball"); 
    Rigidbody2D rb = GetComponent<Rigidbody2D>(); 
    cam.SetActive (true); 
    Debug.Log("Start Called!"); 
} 

void Update() 
{ 

} 

void OnCollisionEnter2D(Collision2D col) 
{ 
    Debug.Log("Collision detected: "+col.gameObject.name); 
    if (col.gameObject.tag == "Bricks") { 
     #if UNITY_EDITOR 
     UnityEditor.EditorApplication.isPlaying = false; 
     #else 
     Application.Quit(); 
     #endif 
    } 
} 

Die nächste Mal bei der Prüfung, ob etwas wahr oder falsch ist, einfach Debug.Log("It works");

+0

es fühlt sich an, als ob hier etwas grundsätzlich falsch ist. Auch an die Konsole writting fehlschlägt: –

+0

Leere OnCollisionEnter2D (Collision2D col) \t { \t \t if (col.gameObject.tag \t == \t "Bricks") { \t \t \t debug.log ("Kollision erkannt"); \t \t} \t \t} –

+0

@RaeMichelleRichards Warum setzen debug.log nicht ("Es funktioniert"); in Ihrer Start-Funktion und überprüfen Sie, ob Sie etwas sehen – Programmer

Verwandte Themen