namespace VRTK.Examples.Utilities { using UnityEngine; using UnityEngine.SceneManagement; public class SceneChanger : MonoBehaviour { private bool canPress; private VRTK_ControllerReference controllerReference; private void Awake() { canPress = false; Invoke("ResetPress", 1f); DynamicGI.UpdateEnvironment(); } private bool IsForwardPressed() { if (!VRTK_ControllerReference.IsValid(controllerReference)) { return false; } if (canPress && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Trigger, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Grip, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, controllerReference)) { return true; } return false; } private bool IsBackPressed() { if (!VRTK_ControllerReference.IsValid(controllerReference)) { return false; } if (canPress && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Trigger, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Grip, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.ButtonTwo, SDK_BaseController.ButtonPressTypes.Press, controllerReference)) { return true; } return false; } private void ResetPress() { canPress = true; } private void Update() { GameObject rightHand = VRTK_DeviceFinder.GetControllerRightHand(true); controllerReference = VRTK_ControllerReference.GetControllerReference(rightHand); int currentSceneIndex = SceneManager.GetActiveScene().buildIndex; int nextSceneIndex = currentSceneIndex; if (IsForwardPressed() || Input.GetKeyUp(KeyCode.Space)) { nextSceneIndex++; if (nextSceneIndex >= SceneManager.sceneCountInBuildSettings) nextSceneIndex = 0; } else if (IsBackPressed() || Input.GetKeyUp(KeyCode.Backspace)) { nextSceneIndex--; if (nextSceneIndex < 0) nextSceneIndex = SceneManager.sceneCountInBuildSettings - 1; } if (nextSceneIndex == currentSceneIndex) { return; } SceneManager.LoadScene(nextSceneIndex); } } }