- Home /
Switching VR Camera's = double initial Rotation value
I have a strange problem when I try and swap OVRCamera's in Unity. I'm currently using Unity 5.4.1f1 and the latest ovr_unity_utilities_1.8.0.
I have edited the MultiCam script from the OculusSampleFrameworkProject_1.5.0 to allow me to swap between OVRPlayerControllers instead of OVRCameraRigs. It's set up to swap on a button press from the controller (for testing) and when the player collides with a trigger object, or when a player presses a button (using Gaze Pointer).
Anyway the issue I have is that whenever I switch to my second OVRPlayerController the initial rotation of the X and Z axis seem to be doubled so to the user the world is tilted.
For example if I leave my Oculus headset on the desk and look at the CenterEyeAnchor rotation settings for the first OVRPlayerController it may show X=-6 y=0 z=-0.1 wheras when I switch to the second OVRPlayerController the figures are x=-12 y=0 z=-0.2
I can't see why this would be the case?
The script is below.
using UnityEngine;
public class MultiCameraSetup : MonoBehaviour {
public OVRPlayerController[] playerControllers = new OVRPlayerController[0];
public Transform[] rayTransformControllers = new Transform[0];
public int currentController = 0;
public OVRInput.RawButton forwardButton = OVRInput.RawButton.Y;
public OVRInput.RawButton backwardButton = OVRInput.RawButton.X;
public static bool doIStart = false;
void Start() {
UpdateCameraControllers();
UpdateRayTransformControllers ();
}
public static void SwapBool() {
if (doIStart == false) {
doIStart = true;
Debug.Log ("Bool Switched");
}
}
void UpdateCameraControllers() {
for (int i = 0; i < playerControllers.Length; i++) {
if (playerControllers [i] == null) {
continue;
}
playerControllers [i].gameObject.SetActive (i == currentController);
OVRManager.display.RecenterPose();
}
}
void UpdateRayTransformControllers() {
for ( int i = 0; i < rayTransformControllers.Length; i++ ) {
if ( rayTransformControllers[i] == null ) {
continue;
}
RayTransforms.mainRayTransform = rayTransformControllers [i];
}
OVRGazePointer.instance.Awake();
}
void Update() {
if (doIStart == true){
doIStart = false;
Debug.Log("Glowring Activated");
SwapCameras ();
}
if ( OVRInput.GetDown(forwardButton)) {
if ( ++currentController == playerControllers.Length ) {
currentController = 0;
}
UpdateCameraControllers();
UpdateRayTransformControllers ();
} else if ( OVRInput.GetDown(backwardButton)) {
if ( --currentController < 0 ) {
currentController = playerControllers.Length - 1;
}
UpdateCameraControllers();
UpdateRayTransformControllers ();
}
}
void SwapCameras ()
{
if ( ++currentController == playerControllers.Length ) {
currentController = 0;
}
UpdateCameraControllers();
UpdateRayTransformControllers ();
}
}