Сравнение двух кватернионов для мобильной игры

Я сейчас работаю над мобильной игрой с использованием Unity. Это включает использование гироскопа, чтобы получить ориентацию / вращение мобильного телефона в пространстве. Мне было трудно сравнивать два кватерниона в C#. Вот мой код:

transform.rotation = Input.gyro.attitude;       // Take the gyroscope rotation data and copy it
transform.rotation.Set(0, 0, 0, 1);             // change current Quaternion rotation data of the copy
                                                // Copy shoud now represent a vertical rotation
Angle = Quaternion.Angle(Input.gyro.attitude,); // Calculate the Angle between the 2
if (Angle < 45)                                 // if it's almost in vertical postion start the game
   /* do something */

То, что я на самом деле пытаюсь сделать, это проверить, находится ли мобильный телефон в вертикальном положении (например, если вы положите его на лоб). Я создаю копию оригинальной ориентации и изменяю ее на ту, какой мне хотелось бы. После этого я сравниваю их, и если они почти одинаковые, игра может продолжаться. Я почти ничего не знаю о кватернионах. Я попытался выяснить, какие кватернионные значения w,x,y,z я должен указать для вертикальной ориентации, но не смог найти никаких подсказок при поиске в Google. Вот почему я прошу помощи здесь.

1 ответ

Вы упоминаете, что пытаетесь увидеть, находится ли телефон в вертикальной ориентации.

Я не уверен, насколько точно вы хотите получить, но если это просто все, что вы хотели бы определить, попробуйте следующее:

if (Screen.orientation == ScreenOrientation.LandscapeLeft) {
    // screen is horizontal
}
Другие вопросы по тегам