cancel
Showing results for 
Search instead for 
Did you mean: 

Meta XR Simulator starts only once

ManInBl4ck
Explorer

Hi, I have a problem with the Meta XR Simulator v60 in Unity 2023.2.7f1 and Meta SDK v60.

When i start a Synthetic Environment Server, set the simulator to active and start the game, everything works as intended. But only exactly once!

Afterwards i get always these 2 errors:

  • XR Management has already initialized an active loader in this scene. Please make sure to stop all subsystems and deinitialize the active loader before initializing a new one.
  • Failed to set DeveloperMode on Start. 

They appear each time until i restart Unity completely (e.g. just stopping the server does not work unfortunately).

I think everything should be set up correctly (e.g. plug-In provider is set to Oculus and all the items in the verify checklist are applied), because it runs without problems once... But then it stops, no idea why.

Any ideas?

 

1 ACCEPTED SOLUTION

Accepted Solutions

ManInBl4ck
Explorer

Think i found a solution, based on this

If anybody should have the same problem, just place that script as a component somewhere in the scene. It ensures, that stuff is correctly uninitialized before re-initializing:

using UnityEngine;
using UnityEngine.XR.Management;
using System.Collections;

public class VRInit : MonoBehaviour {

#if UNITY_EDITOR

    private void Start() {
        EnableXR();
    }

    private void OnDestroy() {
        DisableXR();
    }

    public void EnableXR() {
        StartCoroutine(StartXRCoroutine());
    }

    public void DisableXR() {
        XRGeneralSettings.Instance?.Manager?.StopSubsystems();
        XRGeneralSettings.Instance?.Manager?.DeinitializeLoader();
    }
 
    public IEnumerator StartXRCoroutine() { 
        if(XRGeneralSettings.Instance == null){
            XRGeneralSettings.Instance = XRGeneralSettings.CreateInstance<XRGeneralSettings>();
        }

        if(XRGeneralSettings.Instance.Manager == null){
            yield return new WaitUntil( () => XRGeneralSettings.Instance.Manager != null);
        }

        XRGeneralSettings.Instance?.Manager?.InitializeLoaderSync();
 
        if (XRGeneralSettings.Instance?.Manager?.activeLoader == null){
            Debug.LogError("Initializing XR Failed. Check Editor or Player log for details.");
        }
        else {
            XRGeneralSettings.Instance?.Manager?.StartSubsystems();
        }
    }

#endif

}

 

View solution in original post

1 REPLY 1

ManInBl4ck
Explorer

Think i found a solution, based on this

If anybody should have the same problem, just place that script as a component somewhere in the scene. It ensures, that stuff is correctly uninitialized before re-initializing:

using UnityEngine;
using UnityEngine.XR.Management;
using System.Collections;

public class VRInit : MonoBehaviour {

#if UNITY_EDITOR

    private void Start() {
        EnableXR();
    }

    private void OnDestroy() {
        DisableXR();
    }

    public void EnableXR() {
        StartCoroutine(StartXRCoroutine());
    }

    public void DisableXR() {
        XRGeneralSettings.Instance?.Manager?.StopSubsystems();
        XRGeneralSettings.Instance?.Manager?.DeinitializeLoader();
    }
 
    public IEnumerator StartXRCoroutine() { 
        if(XRGeneralSettings.Instance == null){
            XRGeneralSettings.Instance = XRGeneralSettings.CreateInstance<XRGeneralSettings>();
        }

        if(XRGeneralSettings.Instance.Manager == null){
            yield return new WaitUntil( () => XRGeneralSettings.Instance.Manager != null);
        }

        XRGeneralSettings.Instance?.Manager?.InitializeLoaderSync();
 
        if (XRGeneralSettings.Instance?.Manager?.activeLoader == null){
            Debug.LogError("Initializing XR Failed. Check Editor or Player log for details.");
        }
        else {
            XRGeneralSettings.Instance?.Manager?.StartSubsystems();
        }
    }

#endif

}