Задержка переключения Сцена C # Unity - PullRequest
0 голосов
/ 25 февраля 2019

Я создаю приложение AR, которое обнаруживает QR-коды в качестве целевых изображений.Я обнаружил 4 QR-кода, и после обнаружения QR-кода необходимо загрузить новую сцену.Я использую оператор switch в моем скрипте DefaultTrackableEventHandler в событии OnTrackingFound.

Оператор switch работает.Как только целевое изображение обнаружено, оно переключается на новую сцену.Проблема в том, что он переключается слишком быстро.Как я могу отложить это?Я безуспешно пробовал метод Invoke () и метод IEnumarator.

Вот мой код:

protected virtual void OnTrackingFound()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);

        // Enable rendering:
        foreach (var component in rendererComponents)
            component.enabled = true;

        // Enable colliders:
        foreach (var component in colliderComponents)
            component.enabled = true;

        // Enable canvas':
        foreach (var component in canvasComponents)
            component.enabled = true;


// This is where it detects the image target and loads new scene.
        switch (mTrackableBehaviour.TrackableName)
        {
          case "HLQRj":
                Invoke("PrintGRV", 5);
                SceneManager.LoadScene("PrintGRV");
                break;
           case "FSQRj":
                Invoke("PrintGRV", 5);
                SceneManager.LoadScene("PrintGRV");
                break;
           case "BPQRj":
                Invoke("PrintGRV", 5);
                SceneManager.LoadScene("PrintGRV");
                break;
           case "SPQRj":
                Invoke("PrintGRV", 5);
                SceneManager.LoadScene("PrintGRV");
                break;

        }

    }

1 Ответ

0 голосов
/ 25 февраля 2019

Это зависит от того, как долго и чего вам нужно ждать ... если вы хотите ждать, например, с фиксированной задержкой, вы можете просто использовать Coroutine , например, используя WaitForSeconds

private IEnumerator SwitchScene()
{
    // waits for 2 seconds
    yield return new WaitForSeconds(2);

    SceneManager.LoadScene("PrintGRV");
}

и запустите его как

switch (mTrackableBehaviour.TrackableName)
{
    case "HLQRj":
        Invoke("PrintGRV", 5);
        StartCoroutine(SwitchScene());
        break;
    //...
}

Если вы хотите подождать, пока не будет выполнен какой-то другой асинхронный метод, вы также можете, например, подождать, пока флаг bool станет истинным, какПравильно упомянутые Draco18s можно просто использовать WaitUntil

private bool xyIsDone = false;

private IEnumerator SwitchScene()
{
    // wait until xyIsDone becomes true
    WaitUntil(xyIsDone);

    SceneManager.LoadScene("PrintGRV");
}
...