Я использую Unity, чтобы создать игру, в которой используется гироскоп. Я пытаюсь обнаружить вращение устройства вокруг оси, проходящей через экран, я предполагаю, что это ось Z в Unity Space. Я попытался использовать Input.gyro.attitude.eulerAngles.z
, но он не остается постоянным при наклоне устройства вокруг других осей, я хочу, чтобы он оставался постоянным, так что только «ось Z» определяет вращение рулевого колеса автомобиля, например. Как я могу это реализовать?Unity - гироскоп - вращение вокруг одной оси
EDIT: Я попытался сделать что-то еще. Я использовал Input.gyro.rotationRateUnbiased
вместо Input.gyro.attitude.eulerAngles
Вот код:
Vector3 gInput = Input.gyro.rotationRateUnbiased;
gyroEuler += gInput * Time.deltaTime * Mathf.Rad2Deg;
float rollAngle = gyroEuler.z;
while (rollAngle < 0)
{
rollAngle += 360;
}
while (rollAngle > 360)
{
rollAngle -= 360;
}
Но gyroEuler
будет установлен (0, 0, 0)
независимо от ориентации устройства в начале игры, так что ориентация устройства не будет известна в начале а также Input.gyro.rotationRateUnbiased
очень неточно. Я хочу повернуть экран так, как многие игры, например, Temple Run 2, но я хочу, чтобы он мог поворачивать его на 360 градусов и получить этот угол поворота.
Возможный дубликат [Как заблокировать вращение в г моей камеры во время вращения камеры с помощью мобильного ввода гироскоп] (http://stackoverflow.com/questions/41818719/how -to-lock-rotation-in-z-of-my-camera-while-rotating-the-camera-by-using-mobile) – Kardux
Нет, это меня не очень помогло. –
Например, вам не нужно оценивать «угол Эйлера», но вы можете просто оценить угол между преобразованной осью (по текущему вращению) и, например, землей. https://upload.wikimedia.org/wikipedia/en/thumb/3/30/Plane_with_ENU_embedded_axes.svg/220px-Plane_with_ENU_embedded_axes.svg.png – minorlogic