Я делаю картонную игру Google, используя unity3d и Google Card SDK. Я хотел бы узнать, как лучше всего отключить/включить отслеживание головы, чтобы я мог остановить игру, когда она закончится или до ее начала.
Остановить, отключить или приостановить отслеживание головы Google картон
Ответы (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;
}
Я только что нашел, как отключить отслеживание головы в текущей версии 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;
}
Вы можете отключить отслеживание положения и поворота.
GameObject.Find("Head").GetComponent<CardboardHead>().trackRotation = false;
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