将Oculus Unity Integration升级至v12后,Teleport无法在Quest上运行

时间:2020-01-27 22:33:47

标签: c# unity3d oculus oculusquest oculus-runtime

我当前的堆栈:

  • 耳机:Oculus Quest
  • 单位:v2019.2.19f1
  • Oculus集成:v12
  • OS:MacOs Catilina

我遵循了有关传送的基础教程,并且运行良好:我能够使用左指杆定义虚拟形象传送的新目标和方向。但是,将Oculus Integration for Unity更新到最新版本(v12)后,它停止工作。

这是我的LocalPlayerController预制件的结构:

enter image description here

这是LocomotionController对象的先前(有效)配置:

enter image description here

更新后,我注意到两个脚本已更改:LocomotionController.csTeleportInputHandlerAvatarTouch.cs

enter image description here

LocomotionController.cs

如果我们更详细地分析此脚本,我们会注意到两个字段(CharacterControllerPlayerController)已更改类型。

/************************************************************************************

See SampleFramework license.txt for license terms.  Unless required by applicable law 
or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR 
CONDITIONS OF ANY KIND, either express or implied.  See the license for specific 
language governing permissions and limitations under the license.

************************************************************************************/

using System;
using UnityEngine;
using System.Collections;
using JetBrains.Annotations;
using UnityEngine.Assertions;
#if UNITY_EDITOR
using UnityEngine.SceneManagement;
#endif

/// <summary>
/// Simply aggregates accessors.
/// </summary>
public class LocomotionController : MonoBehaviour
{
    public OVRCameraRig CameraRig;
    //public CharacterController CharacterController;
    public CapsuleCollider CharacterController;
    //public OVRPlayerController PlayerController;
    public SimpleCapsuleWithStickMovement PlayerController;

    void Start()
    {
        /*
        if (CharacterController == null)
        {
            CharacterController = GetComponentInParent<CharacterController>();
        }
        Assert.IsNotNull(CharacterController);
        */
        //if (PlayerController == null)
        //{
            //PlayerController = GetComponentInParent<OVRPlayerController>();
        //}
        //Assert.IsNotNull(PlayerController);
        if(CameraRig == null)
        {
            CameraRig = FindObjectOfType<OVRCameraRig>();
        }
        Assert.IsNotNull(CameraRig);
#if UNITY_EDITOR
        OVRPlugin.SendEvent("locomotion_controller", (SceneManager.GetActiveScene().name == "Locomotion").ToString(), "sample_framework");
#endif
    }
}

我以前只是通过将LocalPlayerController预制件拖到unity编辑器字段中来设置这些字段,但是现在是不可能的。不知道应该在哪里选择CapsuleColliderSimpleCapsuleWithStickMovement。如果我触摸左拇指杆,则播放器会四处移动,这不是预期的行为,也不知道如何更改。

TeleportInputHandlerAvatarTouch.cs

此脚本仅添加了两个新字段(我想是用于新的手部追踪系统),但我不认为它在当前配置方面造成了问题。

我完全被卡住了,不知道如何从这里继续。上次升级似乎没有其他脚本被更新,我的所有研究都没有成功。

2 个答案:

答案 0 :(得分:1)

研究使我this reddit post感叹同一问题,但在他们的情况下,他们似乎只是向PlayerController添加了两个组件:CapsuleColliderSimpleCapsuleWithStickMovement。如果您搜索要添加到PlayerController的组件,则两者都应显示在当前项目中。然后,您显然可以简单地禁用这些组件,并且您的游戏应该可玩而不会引发错误,尽管行为是否符合您的要求是另一个问题。

答案 1 :(得分:0)

经过将近三天的时间和无数次实验,我发现了一种配置,该配置可使Teleport与用于 Oculus Quest 的Oculus Unity集成v12一起使用。

1。设置PlayerController

这是播放器控制器对象结构:

enter image description here

您需要禁用CharacterControllerOVRPlayerController

enter image description here

这将重新激活传送激光器,但不可能在所有表面上都起作用。为了解决此问题,我们需要采取额外的步骤...

2。 LocomotionController的设置

看起来像 引入了一个错误 ,当Aim Collision Type设置为Point时,它会阻止正确的碰撞检测。为了使其正常工作,我们需要将其设置为Sphere并给出任何相对较小的半径/高度(在这种情况下为0.1)

enter image description here

...这帮了我大忙。

希望这会有所帮助!