Остановить, отключить или приостановить отслеживание головы Google картон

Я делаю картонную игру Google, используя unity3d и Google Card SDK. Я хотел бы узнать, как лучше всего отключить/включить отслеживание головы, чтобы я мог остановить игру, когда она закончится или до ее начала.


person Lukesoft    schedule 19.05.2016    source источник


Ответы (4)


Использовать событие OnHeadUpdated

Следуя этому коду.

CardboardHead head;

void Start () {
    head = GameObject.Find("Head").GetComponent<CardboardHead>();
    head.OnHeadUpdated += Test_OnHeadUpdated;
}

private void Test_OnHeadUpdated(GameObject head_obj)
{
    head_obj.transform.rotation = Quaternion.identity;
    head_obj.transform.position = //the position when you stop cardboard;
}
person se0kjun    schedule 19.05.2016

Я только что нашел, как отключить отслеживание головы в текущей версии Google VR: GVR Unity SDK v1.10.0.

Это можно сделать, добавив сценарий GvrHead в префаб GvrViewerMain. После этого вы можете написать простой код для доступа к отслеживанию головы, которым управляет скрипт GvrHead.

    GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackRotation = false;
    GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackPosition = false; 

Напишите этот код на триггере или событии или где угодно, чтобы отключить отслеживание головы.

Этот код находит атрибут public bool trackRotation = true; и public bool trackPosition = true; в GvrHead и изменяет de bool на ложь.

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

Чтобы снова включить отслеживание движения, снова измените логическое значение скрипта GvrHead с тем же типом кода.

    GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackRotation = true;
    GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackPosition = true; 

Сценарий и префаб по умолчанию входят в пакет GVR Unity SDK.

Пример

Я использовал его для триггерного объекта. Когда игрок смотрит прямо на объект, код запускается.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StopHeadTrack : MonoBehaviour, IGvrGazeResponder {
public Animator anim;

public void OnGazeEnter () {
    GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackRotation = false;
    GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackPosition = false; 
}
person Wictor94    schedule 07.12.2016

Вы можете отключить отслеживание положения и поворота.

GameObject.Find("Head").GetComponent<CardboardHead>().trackRotation = false;
person Francois Coulombe    schedule 07.06.2016

6 сентября 2017 года GvrHead.cs больше не существует. Мне удалось отключить отслеживание головы с помощью следующего кода:

VRDevice.DisableAutoVRCameraTracking(Camera.main, true); 

Справочная страница: https://docs.unity3d.com/ScriptReference/VR.VRDevice.DisableAutoVRCameraTracking.html

Обратите внимание, что он работает на смартфоне только после сборки. Он не работает в предварительной версии игры Unity, и у него есть другие проблемы. Я спрашивал об этих проблемах здесь: https://github.com/googlevr/gvr-unity-sdk/issues/716

Таким образом, лучшее решение, вероятно, таково:

private void TrackPositionAndRotation (bool track){
    if (track) {
        #if UNITY_EDITOR
        FindObjectOfType<GvrEditorEmulator>().enabled = true;
        #endif  // UNITY_EDITOR

        #if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
        VRDevice.DisableAutoVRCameraTracking(Camera.main, false);
        #endif  // (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR

        //cardboardHead.GetComponent<GvrHead>().trackPosition = true;
        //cardboardHead.GetComponent<GvrHead>().trackRotation = true;
    } else {
        #if UNITY_EDITOR
        FindObjectOfType<GvrEditorEmulator>().enabled = false;
        #endif  // UNITY_EDITOR

        #if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
        VRDevice.DisableAutoVRCameraTracking(Camera.main, true);
        #endif  // (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR

        //cardboardHead.GetComponent<GvrHead>().trackPosition = false;
        //cardboardHead.GetComponent<GvrHead>().trackRotation = false;
    }
}

ОБНОВЛЕНИЕ 2017.11.29 Приведенный выше код не будет работать, так как VR заменен на XR. Проверьте: https://docs.unity3d.com/ScriptReference/XR.InputTracking-disablePositionalTracking.html

person chelder    schedule 06.09.2017