Ich habe versucht, einen verzögerten Rotationseffekt mit den richtigen Analogsticks zu erzeugen. Der folgende Code nimmt den Winkel basierend auf dem Eingang des rechten Analogsticks und bringt das Objekt stetig näher. Da atan2 ein Bereich von -pi bis pi ist, begünstigt die sich ändernde Rotation immer die Bewegung von 0 rad im Gegensatz zu pi. Gibt es eine Möglichkeit, den Winkel in die entgegengesetzte Richtung zu bewegen?Verwenden von atan2 für verzögerte Rotation
private void Angle()
{
//Angle to go to
RotationReference = -(float)(Math.Atan2(YR, XR));
//Adds on top of rotation to steadily bring it closer
//to the direction the analog stick is facing
Rotation += (RotationReference - Rotation) * Seconds *15;
Console.WriteLine(RotationReference);
}
Edit:
Ich versuchte InBetween vorgeschlagenen Methode, die den Übergang zwischen 2 Pi auf 0 ein Problem verursacht hat. Das hat mich dazu gebracht, etwas anderes zu versuchen. Ich habe keine Ahnung, warum es nicht funktioniert.
private void Angle()
{
//Angle to go to
RotationReference = -(float)(CorrectedAtan2(YR, XR));
//Adds on top of rotation to steadily bring it closer
//to the direction the analog stick is facing
if (Math.Abs(RotationReference - Rotation) > Math.PI)
Rotation += ((float)(RotationReference + Math.PI * 2) - Rotation) * Seconds * 15;
else Rotation += (RotationReference - Rotation) * Seconds *15;
Console.WriteLine(RotationReference);
}
public static double CorrectedAtan2(double y, double x)
{
var angle = Math.Atan2(y, x);
return angle < 0 ? angle + 2 * Math.PI: angle;
}
Die Idee dahinter ist, dass, wenn Sie mehr als 180 Grad reisen müssen Sie den Winkel machen auf mehr als 360 Grad zu reisen. Dies sollte die Notwendigkeit zum Umkehren der Richtung beseitigen.
Ich denke, das Stichwort, das Sie hier suchen, ist Tweening. – craftworkgames