2016-08-06 9 views
0

Ich habe mir dabei die Haare ausgerissen! Innerhalb von Unity versuche ich es so zu machen, wenn das Objekt, mit dem der Spieler kollidiert, ein "Kill" -Tag hat, der Spieler respawnt. Dies wird sich in eine sehr schwierige Aufgabe, weil ohne ersichtlichen Grund funktioniert das nicht:Warum funktionieren meine Tags nicht?

void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.CompareTag("Pick Up")) 
    { 
     other.gameObject.SetActive(false); 
     count = count + 1; 
     SetCountText(); 
     audio.Play(); 
    } 
    else if (other.gameObject.CompareTag("Kill")) 
    { 
     Respawn(); 
    } 
} 

Es scheint, dass, wenn ich neben "Pick Up" andere Tag verwenden, wird es einfach zu erkennen, ist es gar nicht. Ich habe sogar versucht, die Tags umzukehren und sie zu verschiedenen Objekten hinzuzufügen, ohne Erfolg!

Meine Respawn() Funktion funktioniert auch korrekt. Addiert man diese über der Linie senden nichts an der Konsole:

Debug.Log("Respawn"); 
Respawn(); 

Ich bin auch sicher, dass ich für den richtigen Tag im Skript bin Überprüfung, wie ich kopiert und aus dem Unity-Inspektor-Fenster eingefügt. Siehst du hier etwas falsch?

Inspector Window

Auch hier sind die Einstellungen für die RigidBody Innenseite meiner obbject: RigidBody

Alles sieht aus wie es in Ordnung arbeiten werden sollte, aber es funktioniert nicht. Warum ist das und wie kann ich es beheben?

Antwort

1

Dies ist ein logischer Fehler. Entfernen Sie die Else-Anweisung. Mit der else-Anweisung wird die nächste if-Anweisung nicht überprüft, wenn die erste if-Anweisung wahr ist.

if (other.gameObject.CompareTag("Pick Up")) 
{ 
    other.gameObject.SetActive(false); 
    count = count + 1; 
    SetCountText(); 
    audio.Play(); 
} 

if (other.gameObject.CompareTag("Kill")) 
{ 
    Respawn(); 
} 

EDIT:

Stellen Sie sicher, dass Ihr Gameobject mit dem Kill Tag hat seine Is Trigger Eigenschaft geprüft. Stellen Sie außerdem sicher, dass ein Rigidbody an dieses GameObject angehängt ist.

+0

Das Entfernen der Else hat auch nicht funktioniert! – Klink45

+0

Ok. Wie wäre es wenn Sie ** only ** 'if (other.gameObject.CompareTag (" Kill "))' in die 'OnTriggerEnter (Collider other)' Funktion stellen, dann setzen Sie 'Debug.Log (" 1 ")' draussen die if-Anweisung dann 'Debug.Log (" 2 ")' innerhalb der if-Anweisung – Programmer

+0

Es weigert sich immer noch zu arbeiten. – Klink45