2016-05-02 7 views
2

Ich versuche ein generisches "Snake" Spiel mit Unity zu machen, um meine Kenntnisse über C# und Unity-Grundlagen zu vertiefen.Einheit OnTriggerEnter2D CompareTag || CompareTag Inkonsistenz

Das Problem, das ich habe, ist, dass ich nicht scheinen kann, den Spieler zu Game Over zu bekommen, wenn er mit dem Körper kollidiert. Zur Zeit habe ich die Kollisionsprüfung wie folgt aufgebaut:

void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.gameObject.CompareTag("Border") || other.gameObject.CompareTag("Body")) //if the player collides with a Border tag or Body tag... 
    { 
     //Game Over Sequence 
     GameOver(); 
    } 
    else if (other.gameObject.CompareTag("Collectable")) //otherwise if the player collides with a Collectable tag... 
    { 
     //Snek needs to grow! 
     shouldGrow = true; 
    } 
} 

Hier ist ein Bild von der auch Fertiginspektoren Schlangenkörper. Ich habe überprüft, ob das Tag auf "Body" eingestellt ist.

Die Grenze Kollision funktioniert gut, und der seltsame Teil ist auch die Grenze Objekt an dem „Body“ -Tag setzt arbeiten gut, so dass ich bin mir nicht sicher, warum die Körpersegmente nicht auslösen die Game Over-Sequenz.

Ich bin neu in der Programmierung, also Entschuldigung, wenn diese Frage offensichtlich ist, aber ich verstehe nicht, warum das nicht funktioniert.

Vielen Dank im Voraus!

EDIT: Per Programmer Wunsch, hier ist ein Bild von einem der Inspektoren der Grenze:

+0

'||' bedeutet, dass die if-Anweisung wahr ist, wenn sie mit Border ** oder ** Body kollidiert. Setzen Sie 'Debug.Log (" hit ");' vor dem Aufruf von 'GameOver();' Funktion und lassen Sie mich wissen, wenn Sie die Nachricht sehen, wenn Sie mit Border oder Body kollidieren. – Programmer

+0

Die Meldung wird angezeigt, wenn Sie mit dem Rahmen kollidieren oder wenn Sie mit dem Rahmen-Sprite kollidieren, wenn Sie den Typ auf "Körper" einstellen (als zusätzlichen Test). Es erscheint ** nicht **, wenn es mit den Körpersegmenten der Schlange kollidiert. Es scheint, als ob das "Body" -Tag und die If-Anweisung korrekt funktionieren, aber aus irgendeinem Grund löst das Prefab selbst nicht die Kollision aus. Ich habe das Objekt Snake_Body (Copy) auch während der Laufzeit überprüft und es hat das Tag "Body", also bin ich immer noch verloren. – SolAureus

+0

Die einzige Möglichkeit, herauszufinden, ob das, was Sie gesagt haben, wahr ist, ist das Entfernen von 'other.gameObject.CompareTag ("Border") || 'für den Moment und testen Sie einfach zu diesem Zeitpunkt den' Body'. Wenn es immer noch nicht funktioniert, BEARBEITE deine Frage, wähle die "Grenze" in der Einheit, nimm einen Screenshot davon und die Einstellungen und lade sie auch hier hoch, genau wie du es für den Körper getan hast. – Programmer

Antwort

4

Tick 'ist Trigger' auf dem Feld Collider des Snake_Body. Ohne dies wird die OnTriggerEnter2D Funktion nicht aufgerufen. Sie haben das am Grenzbox-Collider korrekt gemacht.

+0

Ja, das ist es .. Von beiden Bildern, die er hochgeladen hat +1 – Programmer

+0

Yeah, ich muss zugeben, ich starrte dies für 20 Minuten, bevor ich es sah! Das zweite Inspektor Foto machte es offensichtlich. –

+2

Nun.Ich fühle mich ein bisschen albern, weil es so einfach und offensichtlich war, haha ​​... nun, danke euch beiden für eure Hilfe! – SolAureus