停止、禁用或暂停头部跟踪 google 纸板
Stop, Disable or Pause head tracking google cardboard
我正在使用 unity3d 和 google cardboard sdk 制作 google cardboard 游戏。我想找出 disable/enable 头部跟踪的最佳方法,以便我可以在游戏结束时或开始前停止游戏。
使用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;
}
您可以禁用位置和旋转跟踪。
GameObject.Find("Head").GetComponent<CardboardHead>().trackRotation = false;
我刚刚找到如何在当前版本的 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 更改为 false。
要了解为什么此代码行会彻底禁用头部跟踪,请查看 GvrHead 脚本。
要改回启用 Headtracking,请使用相同类型的代码再次更改 GvrHead 脚本的 bool 值。
GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackRotation = true;
GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackPosition = true;
GVR Unity SDK包中默认自带Script和prefab
例子
我用它作为触发器对象。当玩家注视对象时,代码就会运行。
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;
}
2017 年 9 月 6 日,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
我正在使用 unity3d 和 google cardboard sdk 制作 google cardboard 游戏。我想找出 disable/enable 头部跟踪的最佳方法,以便我可以在游戏结束时或开始前停止游戏。
使用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;
}
您可以禁用位置和旋转跟踪。
GameObject.Find("Head").GetComponent<CardboardHead>().trackRotation = false;
我刚刚找到如何在当前版本的 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 更改为 false。
要了解为什么此代码行会彻底禁用头部跟踪,请查看 GvrHead 脚本。
要改回启用 Headtracking,请使用相同类型的代码再次更改 GvrHead 脚本的 bool 值。
GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackRotation = true;
GameObject.Find ("VRPlayer").GetComponent<GvrHead> ().trackPosition = true;
GVR Unity SDK包中默认自带Script和prefab
例子
我用它作为触发器对象。当玩家注视对象时,代码就会运行。
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;
}
2017 年 9 月 6 日,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