You can navigate between scenes in two ways:
1. From inside a VR scene
ViroVRSceneNavigator passes a sceneNavigator prop to every scene. Use this to push, pop, replace, or jump without needing a ref.
export function MyVRScene({ sceneNavigator }: any) {
return (
<ViroScene>
<ViroNode onClick={() => sceneNavigator.push({ scene: DetailScene })}>
{/* … */}
</ViroNode>
</ViroScene>
);
}
2. From panel-side code (via ref)
Use a ref on the ViroXRSceneNavigator. Note that the ref accessor is named arSceneNavigator for historical reasons, but it works for VR on Quest as well.
const navRef = useRef<any>(null);
// Push a new scene
navRef.current?.arSceneNavigator?.push({ scene: DetailScene });
// Pop back
navRef.current?.arSceneNavigator?.pop();
<ViroXRSceneNavigator ref={navRef} vrInitialScene={{ scene: MyVRScene }} />
// From inside a VR scene
export function MyVRScene({ sceneNavigator }: any) {
return (
<ViroScene>
<ViroNode onClick={() => sceneNavigator.push({ scene: DetailScene })}>
{/* … */}
</ViroNode>
</ViroScene>
);
}
// From panel-side code (via ref)
const navRef = useRef<any>(null);
// Push a new scene
navRef.current?.arSceneNavigator?.push({ scene: DetailScene });
// Pop back
navRef.current?.arSceneNavigator?.pop();
<ViroXRSceneNavigator ref={navRef} vrInitialScene={{ scene: MyVRScene }} />