Ich habe ein Schiff Rad der Spieler kann drehen. Ich nehme gerade die Winkeländerung auf, die zu einem Gesamtwinkel addiert wird. Ich kann dann herausfinden, wie oft das Schiffsrad gedreht wurde. Das alles funktioniert gut.Finden Sie den Unterschied in der Rotation, als ein Durchschnitt über die Zeit Einheit C#
void Update()
{
//Record Amount of Wheel Turns
currentAngle = wheelRectTransform.transform.rotation.eulerAngles.z;
angleChange = Mathf.DeltaAngle(currentAngle, previousAngle);
if ((Mathf.Abs(angle + angleChange)/360) <= wheelTurnsUntilRudderAtMaxAngle)
{
angle += angleChange;
}
totalWheelTurns = angle/360;
shipStats.RudderAngle = totalWheelTurns/wheelTurnsUntilRudderAtMaxAngle;
previousAngle = currentAngle;
}
jedoch, würde Ich mag auch die durchschnittliche Winkeländerung im Laufe der Zeit aufzuzeichnen. Dann könnte ich eine genaue Vorstellung davon bekommen, ob sich das Rad nach links oder rechts dreht.
Ich habe etwas einfach versucht, wie diese
if (angleChange < 0)
{
// Going Left
}
else if (angleChange > 0)
{
// Going Right
} else
{
// Not moving
}
In der Praxis jedoch, wenn der Spieler sehr das Rad dreht, sehr langsam die Winkeldifferenz auf dem gelegentlichen Rahmen 0 und aufgezeichnet als ‚nicht bewegt‘.
Ich glaube, die Lösung wäre, die durchschnittliche Winkeländerung über eine kurze Zeit zu finden, also versuchte ich, den Winkel auf 0 im Laufe der Zeit zu verringern.
newAngleDifference = Mathf.Lerp(angleChange, 0, Time.deltaTime * 0.2f);
Das hat nicht funktioniert, es mir das gleiche Feedback gibt, wie ich gerade bin mit ‚angleChange‘, die ohnehin 0 sein können.
Danke!
Jim
Der ganze Code ist ein Durcheinander gerade jetzt, während ich einige Bewegung prototyping bin. Aber ich habe es für dich hier hingestellt. Ich benutze gerade eine Art Lerp, um die Richtung auszuarbeiten, es ist nicht perfekt, aber es wird reichen. http://pastebin.com/kGLrUYVu – Jim
Ja, z-Richtung. Kein starrer Körper. – Jim