private void TurnToward(float desiredAngle) { // TODO: verify that the sign of these numbers is correct for both XY and XZ float currentAngle = (ZMult * transform.localEulerAngles.y) + (YMult * transform.localEulerAngles.z); float angleDiff = SteeringUtilities.angleDiff(currentAngle, desiredAngle); float rotationPerFrame = turnRate * Time.fixedDeltaTime; if (angleDiff > rotationPerFrame) { float newAngle = currentAngle + rotationPerFrame; transform.localEulerAngles = new Vector3(0, ZMult * newAngle, YMult * newAngle); } else if (angleDiff < -rotationPerFrame) { float newAngle = currentAngle - rotationPerFrame; transform.localEulerAngles = new Vector3(0, ZMult * newAngle, YMult * newAngle); } else { transform.localEulerAngles = new Vector3(0, ZMult * desiredAngle, YMult * desiredAngle); } }