Перецентрировать или переориентировать вид с помощью Cardboard SDK на Unity

С помощью Unity сценарий CardboardHead добавляется к основной камере, и он довольно хорошо справляется со всем, но мне нужно иметь возможность «повторно центрировать» вид по запросу, и единственный вариант, который я вижу до сих пор, — это вращать всю сцену, и кажется как будто это то, что можно было бы решить из первых рук, и я ничего не могу найти в документах.

С Oculus Mobile SDK (GearVR) это будет OVRCamera.ResetCameraPositionOrientation(Vector3.one, Vector3.zero, Vector3.up, Vector3.zero); хотя они прекрасно справляются с этим каждый раз, когда надевают вьювер, поэтому там он редко нужен.


person rainabba    schedule 17.12.2014    source источник


Ответы (4)


В CardboardHead есть параметр target, который позволяет вам использовать другой игровой объект в качестве ссылки для вращения. Или вы можете использовать фиктивный родительский игровой объект. В любом случае, когда вы хотите центрировать, вы устанавливаете вращение этого эталонного объекта так, чтобы CardboardHead теперь указывал вперед. Добавьте эту функцию в скрипт на CardboardHead (или просто добавьте ее в этот скрипт):

public void Recenter() {
    Transform reference = target != null ? target : transform.parent;
    if (reference != null) {
        reference.rotation = Quaternion.Inverse(transform.rotation) * reference.rotation;
        // next line is optional -- try it with and without
        reference.rotation = Quaternion.FromToRotation(reference.up, Vector3.up) * reference.rotation;
    }
}
person smd    schedule 17.12.2014

Cardboard.SDK.Recenter (); должно помочь.

Ориентация Recenter Добавлена ​​функция Recenter() в Cardboard.SDK, которая сбрасывает трекер головы, чтобы текущий курс телефона становился направлением вперед (ось + Z).

Не удалось найти документы для API/SDK, но они есть в примечаниях к выпуску для версии 0.4.5. Обновлять.

person Jerome Maurey-Delaunay    schedule 05.08.2015
comment
Раньше это помогало в версии 0.7.0, но с тех пор, как я обновился до 0.9.1, это больше не работает. Очень странный. - person Pedro; 24.08.2016

Вы можете повернуть картонную основу так, чтобы она указывала в определенном направлении.

Это то, что сработало для меня, когда я хотел, чтобы приложение запускалось определенным образом. Поскольку CardboardHead указывает на Vector3.zero при запуске, если цель не назначена, я запускал функцию во время Start() для CardboardMain, которая указывала бы в нужном мне направлении.

Конечно, если вы уже меняете CardboardMain по какой-то другой причине, можно использовать тот же метод, создав родителя CardboardHead (дочерний элемент CardboardMain) и сделав то же самое.

person Pro Q    schedule 23.05.2016

Этот вопрос немного устарел, но для Google VR SDK 1.50+ вы можете сделать

transform.eulerAngles = new Vector3(newRot.x, newRot.y, newRot.z);
UnityEngine.VR.InputTracking.Recenter();

Кроме того, если вы не хотите запутаться, вам также нужно поймать экземпляр GvrEditorEmulator и перецентрировать его.

#if UNITY_EDITOR
        gvrEditorEmulator.Recenter();
#endif

Повторное центрирование GvrEditorEmulator, похоже, не очень хорошо работает на данный момент, но если вы отключите его, вы увидите, что центрирование работает для основной камеры.

person SteakOverflow    schedule 10.07.2017