Ist es möglich ein Objekt in Unity, unabhängig seiner aktuellen Drehung, zu drehen?
Ich bin grade dabei zu lernen wie man mit Unity bzw. C# umgeht. Und ich möchte ein simples Projekt machen in dem man rumlaufen kann. die Steuerung und alles ist vorhanden und ich will jetzt noch machen das man sich mit der Maus umsehen kann. Das Problem ist jedoch wenn ich mich bereits gedreht habe, dann verändert sich der Anhaltspunkt der Kamera in welche Richtung sie sich drehen soll. Demnach dreht sie sich nicht mehr nach bspw. rechts sondern rechst unten obwohl ich die Maus nur nach rechts bewege. Wie kann ich es coden, dass das nicht mehr so ist und sich die Kamera nur nach rechts oder nur nach oben bewegt?
float mouse_horizontal = Input.GetAxis("Mouse X");
float mouse_vertical = Input.GetAxis("Mouse Y");
transform.Translate(mouse_vertical, mouse_horizontal, 0);
1 Antwort
Wenn du dich entsprechend der Mausbewegung drehen möchtest, dann machst du das folgendermaßen:
1.) Du bestimmst den 2D-Bewegungsvektor der Maus (in der Regel aus der Differenz der vorherigen Mausposition und der jezigen Mausposition).
Daraus kannst du einen 3D-Vektor machen, indem du entweder den Z-Part auf 0 setzt oder diesen anders bestimmst, beispielsweise indem du Drehungen der Kamera über bestimmte Maustasten erlaubst.
Den entstehenden Vektor solltest du normalisieren.
2.) Mit diesem Bewegungsvektor kannst du die Drehachse bestimmen. Diese ist:
cross(cam_movement, view_direction);
Wenn du "view_direction" dabei als absolute Viewdirection wählst, dann erhälst du auch die absolute Drehachse.
Ist "view_direction" die relative Viewdirection, dann erhälst du die Drehachse relativ zur aktuellen Orientierung der Kamera.
3.) Du drehst die Kamera um die Achse. Beachte dabei, ob du die relative oder die absolute Drehachse verwendest.