2017-01-18 1 views
0

Ich habe einen Controller zum Öffnen von Türen in einem TopDown-Shooter erstellt.Unity - Zerstöre den DoorController nach Beendigung der Aufgabe

Ich rotiere Drehpunkte um ihre lokale Y-Achse, um die Türobjekte zu öffnen. Die Türen sollten offen bleiben, daher brauche ich den Controller und das Controller-Objekt nicht mehr. Ich möchte es nach Beendigung seiner Arbeit zerstören.

Mein Skript sieht folgendermaßen aus:

public class DoorController : MonoBehaviour 
{ 
    public Transform pivotLeftTransform; // the left pivot point 
    public Transform pivotRightTransform; // the right pivot point 

    int openAngle = 90; // how far should the door open up? 
    bool startOpen = false; // start opening? 
    float smooth = 2; // smooth rotation 

    private void OnTriggerEnter(Collider other) 
    { 
     if (other.gameObject.tag == "Player") 
     { 
      startOpen = true; // when the Player triggers, start opening 
     } 
    } 

    void Update() 
    { 
     if (startOpen) 
     { 
      OpenDoor(pivotLeftTransform, openAngle); 
      OpenDoor(pivotRightTransform, -openAngle); 

      if (pivotLeftTransform.localRotation.y == openAngle && pivotRightTransform.localRotation.y == -openAngle) // when the doors are rotated, destroy this object 
      { 
       Destroy(gameObject); 
      } 
     } 
    } 

    private void OpenDoor(Transform pivotTransform, int rotationAngle) 
    { 
     Quaternion doorRotationOpen = Quaternion.Euler(0, rotationAngle, 0); // desired door rotation 
     pivotTransform.localRotation = Quaternion.Slerp(pivotTransform.localRotation, doorRotationOpen, smooth * Time.deltaTime); // rotate the door to the desired rotation 
    } 
} 

Meine Frage ist, wie kann ich das Objekt zu zerstören. Mein Code

if (pivotLeftTransform.localRotation.y == openAngle && pivotRightTransform.localRotation.y == -openAngle) 

scheint nicht zu funktionieren. Nachdem der Drehpunkt um 90 oder -90 Grad gedreht wurde, bleibt die Aussage weiterhin falsch. Ich versuchte auch

pivotTransform.rotation.y 

, aber es funktioniert auch nicht. Welche Rotation muss ich durchlaufen?

Danke.

Antwort

1

Zwei falsche Dinge in Ihrem Code:

.Comparing schwimmt

transform.localRotation oder transform.rotation .Using für Winkel zu überprüfen.

Sie können dies lösen, indem Sie eulerAngles oder localEulerAngles verwenden. Verwenden Sie auch >= anstelle von =, um das Floaten zu vergleichen, das möglicherweise nie wahr ist. Ersetzen

if (pivotLeftTransform.localRotation.y == openAngle && pivotRightTransform.localRotation.y == -openAngle) 
{ 
    Destroy(gameObject); 
} 

mit

if (pivotLeftTransform.localEulerAngles.y >= openAngle && pivotRightTransform.localRotation.y >= -openAngle) 
{ 
    Destroy(gameObject); 
} 

Wenn Sie Problem mit der Antwort haben über Sie eins nach dem anderen zu beheben haben. Trennen Sie die && und sehen, welche man wie andernfalls:

if (pivotLeftTransform.localEulerAngles.y >= openAngle) 
{ 
    Debug.Log("pivotLeftTransform"); 
} 

if (pivotRightTransform.localRotation.y >= -openAngle) 
{ 
    Debug.Log("pivotRightTransform"); 
} 
+0

Vielen Dank für Ihre Antwort! Leider hat nichts von diesen Vorschlägen funktioniert :( – Garzec

-1

Der richtige Weg, dies archieve einen kleinen Toleranzwert hinzu:

if (pivotLeftTransform.localEulerAngles.y >= openAngle - 0.1f && pivotRightTransform.localEulerAngles.y <= 360 - openAngle + 0.1f) 

Dieser Code nicht sauber sein, aber es funktioniert für die Moment :)

Verwandte Themen