首页 > 解决方案 > 如何使用 Oculus Locomotion Controller 禁用方向?

问题描述

我是 Unity 和 VR 的新手。我正在使用 Oculus Quest 开发 VR 应用程序。我已经根据 Valem 的以下教程视频设置了一个传送系统: https: //www.youtube.com/watch? v=r1kF0PhwQ8E - 但发现当我在传送过程中转过头或使用拇指杆进行定向时,之后着陆时我可能会面向侧面,并且使用拇指操纵杆的任何进一步移动似乎都没有正确对齐 - 所以当您尝试向前移动时,您会向侧面移动等。

我认为我的相机设备(它是 OVRPlayerController 的子设备)正朝着错误的方向。这得到了以下事实的支持:我放置在钻机前面的一些文本似乎已经移到了一边,而不是直接放在前面。

我只想要一个简单的传送系统,这样你就可以移动到新位置但不要定向——而是保持与开始时相同的方向。

是否可以禁用方向?或者有没有推荐的用于传送系统的替代解决方案?

标签: unity3doculusoculusquest

解决方案


我使用此解决方法来删除传送方向:

  • 打开 TeleportDestination 预制件

  • 删除方向游戏对象

  • 点击播放,然后修复那些引用它的脚本

  • 您还将最终进入 LocomotionTeleport.cs DoTeleport(),它似乎设置了传送旋转(如果在此处修改代码可能就足够了)

      public void DoTeleport()
      {
          var character = LocomotionController.CharacterController;
          var characterTransform = character.transform;
          // removed orientation
          //var destTransform = _teleportDestination.OrientationIndicator;
          var destTransform = _teleportDestination.transform;
    
          Vector3 destPosition = destTransform.position;
          destPosition.y += character.height * 0.5f;
          // removed orientation
          //Quaternion destRotation = _teleportDestination.LandingRotation;// destTransform.rotation;
        #if false
          Quaternion destRotation = destTransform.rotation;
    
          //Debug.Log("Rots: " + destRotation + " " + destTransform.rotation * Quaternion.Euler(0, -LocomotionController.CameraRig.trackingSpace.localEulerAngles.y, 0));
    
          destRotation = destRotation * Quaternion.Euler(0, -LocomotionController.CameraRig.trackingSpace.localEulerAngles.y, 0);
      #endif
          if (Teleported != null)
          {
              //Teleported(characterTransform, destPosition, destRotation);
              Teleported(characterTransform, destPosition, characterTransform.rotation);
          }
    
          characterTransform.position = destPosition;
          //characterTransform.rotation = destRotation;
      }
    

推荐阅读