Привет, ребята, как мне найти поворот телефона с помощью Google Cardboard SDK в Unity3D, например, как смотрит голова человека? Мне нужно найти, смотрит ли он больше на восток, запад или север. Нахожу ли я вращение головы, или родительскую основную камеру?
Как найти вращение головы в Google Cardboard Unity3D?
Ответы:
Класс Cardboard содержит свойство HeadRotation, которое является кватернионом.
Quaternion crtRot = youCardboardController.HeadRotation;
Чтобы использовать его вращение, как в Unity с направленными векторами, вы можете просто умножить его на Vector3.forward.
Vector3 lookDir = crtRot * Vector3.forward;
Визуализация вектора в редакторе может помочь сузить круг проблем
void Update () {
// ..
Debug.DrawRay( pos, lookDir * 100, Color.blue );
// ..
}
Отсюда вам нужно только знать, где находится север в смысле вектора направления. Сделайте Vector3.Angle(), и у вас будет угол между вашим аватаром и вектором Севера. Возможно, вы захотите оценить оба вектора с их осями Y, установленными на 0.
Вы также можете использовать Vector3.Dot() (точечный продукт), чтобы определить, насколько оба вектора смотрят в одном направлении.
У меня была проблема с HeadPosition, которая не обновлялась должным образом. Поэтому, если вы работаете с HeadPosition, имейте в виду, что он может придерживаться 0,0,0.
Возьмите Head.transform.rotation
— это ориентация головы пользователя.
Я не совсем уверен, что вы имеете в виду под севером или западом. Если в мобильном устройстве есть магнитометр, то, возможно, вы могли бы прочитать его данные, чтобы определить, где находится север, но я никогда этого не делал.
Это будет вращение объекта «Голова», хотя основная камера обычно имеет такое же вращение.
Но если вам нужно направление относительно реального мира, эта информация недоступна в SDK. Компас нельзя использовать из-за магнита, поэтому нет возможности определить реальное направление.
Просто возьмите угол поворота основной камеры в сцене. Это даст вам углы поворота головы относительно осей x, y и z.
В VR-сценах на основе GVR система внутренне вращает камеру относительно движений головы. Таким образом, легко получить вращение головы, используя углы поворота основной камеры.
Для этого,
//local rotation of the Transform of the camera
Camera.main.transform.localEulerAngles.y
//The world Y rotation
Camera.main.transform.rotation.y