2016-07-25 5 views
1

Ich arbeite an einem Spiel mit Unity, und ich mache einen Feind seine Waffe fallen lassen. Die Waffe des Vektors (in lokalem Raum) (0, 0, 1,71), und ich bin mit der folgenden Funktion:GameObject Position im Welt-Raum nach dem Entfernen von Eltern geändert

void SetGunDrop() 
{ 
    gun.SetParent (null); 
    gun.GetComponent<Animator>().enabled = false; 
    Rigidbody rb = gun.GetComponent<Rigidbody>(); 
    rb.isKinematic = false; 
} 

jedoch direkt nach der Mutter Lösen die Waffe übersetzt (0, 0, 1.71) in Weltposition, übersetzt weg vom Körper des Feindes zum Zentrum der Karte.

Gibt es eine Möglichkeit, dies zu vermeiden und die Waffe direkt aus ihrer Position auf den Boden fallen zu lassen?

Antwort

0

Ich würde empfehlen, das Elternelement der Waffe Transform gleich Null oder der Transformation des Weltraums, dann fügen Sie die X/Y/Z-Transformation Wert des GameObject die Waffe auf die X/Y/Z der Transformation fallen.

void SetGunDrop() { 
    var parentT = gun.parent.transform; 
    gun.SetParent (null); 
    gun.position += new Vector(parentT.x, parentT.y, parentT.z); 
    gun.GetComponent<Animator>().enabled = false; 
    Rigidbody rb = gun.GetComponent<Rigidbody>(); 
    rb.isKinematic = false; 
} 

Wenn Sie mehr Informationen über Transform.SetParent() wollen Besuche Unity Dokumentation here. Für weitere Informationen zum Verschieben von Unity Transforms gibt es hier eine post darüber. Viel Glück!

EDIT: Aktualisiert Pistole Variable eine Transformationsgameobject :) zu reflektieren sein

+0

Es tut mir leid! Ich habe vergessen, das hinzuzufügen! Die _gun_ Variable ist eine Transformation, und ich werde auch versuchen, was Sie vorgeschlagen haben, danke! – D4rkM4sterBR

0

Eine einfache Art und Weise zu lösen diese die Weltposition der Waffe zu speichern ist es vor dem Ablegen.

void SetGunDrop() 
{ 
    Vector3 tempPosition = gun.position; 
    gun.SetParent (null); 
    gun.position = tempPosition; 

    gun.GetComponent<Animator>().enabled = false; 
    Rigidbody rb = gun.GetComponent<Rigidbody>(); 
    rb.isKinematic = false; 
} 

Dies sollte für Sie arbeiten, viel Glück!

+0

Das Problem ist, dass das auch nicht funktioniert hat. Die Waffe blieb einfach in der gleichen Position, auch nachdem ich ihre Position mit Translate() und mit der Art, wie Sie vorgeschlagen hatten, festgelegt hatte. Ich fand jedoch eine Alternative, die viel sauberer und optimierter ist, aber danke, dass du trotzdem hilfst! – D4rkM4sterBR

Verwandte Themen