【问题标题】:Stop, Disable or Pause head tracking google cardboard停止、禁用或暂停头部跟踪谷歌纸板
【发布时间】:2016-05-19 07:13:33
【问题描述】:

我正在使用 unity3d 和 google cardboard sdk 制作一个 google cardboard 游戏。我想了解禁用/启用头部跟踪的最佳方法,以便我可以在游戏结束或开始之前停止游戏。

【问题讨论】:

    标签: unity3d google-cardboard


    【解决方案1】:

    我刚刚找到了如何在当前版本的 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; 
    

    将此代码写入触发器或事件或任何您想要的位置,以禁用头部跟踪。

    这段代码在GvrHead上找到属性public bool trackRotation = true;public bool trackPosition = true;,并将de bool改为错误

    要了解为什么此代码行会彻底禁用头部跟踪,请查看 GvrHead 脚本。

    要重新启用 Headtracking,请使用相同类型的代码再次更改 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; 
    }
    

    【讨论】:

      【解决方案2】:

      使用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;
      }
      

      【讨论】:

        【解决方案3】:

        您可以禁用对位置和旋转的跟踪。

        GameObject.Find("Head").GetComponent<CardboardHead>().trackRotation = false;
        

        【讨论】:

          【解决方案4】:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-21
            • 2022-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多