NachoMan Geschrieben 11. April 2018 Melden Share Geschrieben 11. April 2018 Hallo, ich benutzte Unity mit BulletPhysics für ein Weltraumspiel um mehrere Welten gleichzeitig simulieren zu können. Nun möchte ich mein Raumschiff in Richtung der Camera so drehen, dass die Nase des Schiffes in Blickrichtung zeigt. Dafür stehen AddTorque und AddRelativeTorque bereits zur Verfügung. Mein Problem ist, dass ich keine Ahnung habe wie ich die Richtung, in die gedreht werden muss, berechne und wie ich dafür sorge, dass die Rotation langsamer wird je näher ich der Zielrotation bin. Momentan sieht es so aus: public void RotateTowards(Vector3 targetRotation) { Quaternion relativeRotation = Quaternion.FromToRotation(transform.forward, targetRotation); _cacheRigidbody.AddTorque(relativeRotation.eulerAngles * rollRate); } Das Raumschiff dreht sich zwar, aber nicht annähern in die Richtung in die es sich drehen soll.(targetRotation bekomme ich über cameraTransform.forward) Danke schonmal Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 11. April 2018 Melden Share Geschrieben 11. April 2018 Probiers mal mit "LookRotation": https://docs.unity3d.com/ScriptReference/Quaternion.LookRotation.html Alternative, "RotateTowards: https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
NachoMan Geschrieben 11. April 2018 Autor Melden Share Geschrieben 11. April 2018 Ich kann das Objekt nicht einfach Rotieren. Ich muss eine Kraft anwenden damit die Physik richtig berechnet wird. Deswegen bringt mir RotateTowards nichts. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 11. April 2018 Melden Share Geschrieben 11. April 2018 Du brauchst das hier: https://docs.unity3d.com/ScriptReference/Rigidbody.MoveRotation.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
NachoMan Geschrieben 11. April 2018 Autor Melden Share Geschrieben 11. April 2018 Wie gesagt, ich verwende UnityBullet. Dort gibt es diese Methode nicht. :/ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 12. April 2018 Melden Share Geschrieben 12. April 2018 Ja dann wird's schwerer. Dann musst du halt immer die Rotation des Körpers abfragen und wenn noch gedreht werden muss, weiterhin Kräfte ausüben oder gleich die Velocity manipulieren. Keine Ahnung, welche Befehle dafür in Bullet vorhanden sind. Man kann außerdem trotzdem einen RB über seine Transformkomponente drehen und auch bewegen. Da diese Bewegung aber nicht mit der Physikberechnung synchron ist, kann es zu Problemen mit der Kollisionserkennung kommen. Aber bei langsamen Geschwindigkeiten wirst du keinen Unterschied erkennen. Das funktioniert jedenfalls mit PhysiX. Ob das bei Bullet genauso funktioniert kann ich nicht sagen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
NachoMan Geschrieben 22. April 2018 Autor Melden Share Geschrieben 22. April 2018 Ich habs Man muss einfach das Kreuzprodukt von transform.foward und dem gewünschten Richtungsvektor berechnen und den der AddTorque-Methode übergeben. _cacheRigidbody.AddTorque(Vector3.Cross(direction, transform.forward) * -90000f); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.