namespace VRTK.Examples.Utilities { using UnityEngine; using UnityEngine.SceneManagement; public class VRTKExample_SceneSwitcher : MonoBehaviour { public KeyCode backKey = KeyCode.Backspace; public KeyCode forwardKey = KeyCode.Space; protected int firstSceneIndex = 0; protected int lastSceneIndex; protected bool pressEnabled; protected VRTK_ControllerReference controllerReference; protected virtual void Awake() { DynamicGI.UpdateEnvironment(); } protected virtual void OnEnable() { lastSceneIndex = SceneManager.sceneCountInBuildSettings - 1; pressEnabled = false; Invoke("EnablePress", 1f); } protected virtual void Update() { GameObject rightHand = VRTK_DeviceFinder.GetControllerRightHand(true); controllerReference = VRTK_ControllerReference.GetControllerReference(rightHand); int currentSceneIndex = SceneManager.GetActiveScene().buildIndex; int nextSceneIndex = currentSceneIndex; if (ForwardPressed()) { nextSceneIndex++; if (nextSceneIndex >= lastSceneIndex) { nextSceneIndex = firstSceneIndex; } } else if (BackPressed()) { nextSceneIndex--; if (nextSceneIndex < firstSceneIndex) { nextSceneIndex = lastSceneIndex - 1; } } if (nextSceneIndex != currentSceneIndex) { SceneManager.LoadScene(nextSceneIndex); } } protected virtual void EnablePress() { pressEnabled = true; } protected virtual bool BackPressed() { if (Input.GetKeyDown(backKey) || ControllerBackward()) { return true; } return false; } protected virtual bool ForwardPressed() { if (Input.GetKeyDown(forwardKey) || ControllerForward()) { return true; } return false; } protected virtual bool ControllerForward() { if (!VRTK_ControllerReference.IsValid(controllerReference)) { return false; } return (pressEnabled && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.ButtonTwo, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Trigger, SDK_BaseController.ButtonPressTypes.Press, controllerReference)); } protected virtual bool ControllerBackward() { if (!VRTK_ControllerReference.IsValid(controllerReference)) { return false; } return (pressEnabled && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.ButtonTwo, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, controllerReference) && VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Grip, SDK_BaseController.ButtonPressTypes.Press, controllerReference)); } } }