Teleport not working on Quest after upgrading Oculus Unity Integration to v12

My current stack:

  • Headset: Oculus Quest
  • Unity: v2019.2.19f1
  • Oculus Integration: v12
  • OS: MacOs Catilina

I have followed a basic tutorial about teleporting and it was working well: I was able to use the left thumbstick to define the new target & orientation of the avatar teleportation. However, after updating the Oculus Integration for Unity to the latest version (v12), it stopped working.

This is the structure of my LocalPlayerController prefab:

and this was the previous (working) configuration of the LocomotionController object:

after the update, I noticed that 2 scripts changed: LocomotionController.cs and TeleportInputHandlerAvatarTouch.cs:

LocomotionController.cs

if we analyse this script more in detail we can notice that two fields (CharacterController and PlayerController) have changed type.

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

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префаб в поля редактора единства, но теперь это невозможно. Не уверен, где мне это выбратьCapsuleCollider а также SimpleCapsuleWithStickMovement. Если я прикоснусь к левому мини-джойстику, мой игрок начнет двигаться, что не является предполагаемым поведением, и я не знаю, как его изменить.

TeleportInputHandlerAvatarTouch.cs

Этот скрипт просто добавляет два новых поля (я думаю, для новой системы отслеживания рук), но я не думаю, что это создает проблемы с текущей конфигурацией.

Я полностью застрял и не знаю, что делать дальше. Похоже, что никакие другие скрипты не обновлялись с последним обновлением, и все мои исследования были безуспешными.

3 ответа

Исследования привели меня к этому сообщению на Reddit, в котором я жалуюсь на ту же проблему, но в их случае они, кажется, просто добавили два компонента вPlayerController: а CapsuleCollider а также SimpleCapsuleWithStickMovement. Оба должны появиться в вашем текущем проекте, если вы ищете компоненты для добавления вPlayerController. Тогда вы, по-видимому, можете просто отключить эти компоненты, и ваша игра должна воспроизводиться без ошибок, хотя другой вопрос, является ли поведение вашим.

После почти трех дней и бесконечного количества экспериментов я нашел конфигурацию, которая заставляет телепорт работать с интеграцией Oculus Unity v12 для Oculus Quest.

1. Настройка PlayerController

Это структура объекта Player Controller:

вам нужно отключить CharacterController а также OVRPlayerController

это повторно активирует лазер телепорта, но вряд ли он будет работать со всеми поверхностями. Чтобы решить эту проблему, нам нужен дополнительный шаг...

2. Настройка LocomotionController

Похоже, была введена ошибка, которая мешает правильному обнаружению столкновений приAim Collision Type установлен на Point. Чтобы он работал, нам нужно установить его наSphereи задайте относительно небольшой радиус / высоту (в данном случае 0,1)

... это помогло мне.

Надеюсь, это поможет!

Я думаю, что правильный ответ на данный момент (31.01.2022) заключается в том, что вам нужно установить в Locomotion Controller - Teleport Target Handler Physical - Aim Collision Layer Mask to Everything (или то, что имеет смысл для вас). По умолчанию это «Ничто», поэтому на человеческом языке это было «нет поверхности, которую я позволяю нацелить туда телепортироваться», и мы установили ее на «Все».

Другие вопросы по тегам