Trouble With Free Movement & Camera in Oculus
In my scenes I've used the built in FPS Controller, a custom free movement camera (for up/down along with WASD) and the SteamVr Vive Rig. When I use the custom free movement camera with OSVR and Vive or a non VR build, it works fine. When it's used with the Oculus, all movement other than headset rotation is locked out. I had been using the built in FPS controller with the Oculus as a backup, but now when I test it out by using the OSVR setting and my Vive, the camera is about 2 feet higher than it should be in game space. I've had this issue confirmed from an Oculus user as well.
Ideally I'd like to be able to use a free movement camera for a PC, Oculus or Vive (OSVR) Build.
Any ideas on what could be causing this or how to get this to work? I've rebuilt the camera, tried multiple configurations and confirmed no other cameras are active in the scene.
{ CursorLockMode wantedMode;
public float cameraSensitivity = 90;
public float climbSpeed = 4;
public float normalMoveSpeed = 10;
public float slowMoveFactor = 0.25f;
public float fastMoveFactor = 3;
private float rotationX = 0.0f;
private float rotationY = 0.0f;
void SetCursorState ()
{
Cursor.lockState = wantedMode;
// Hide cursor when locking
Cursor.visible = (CursorLockMode.Locked != wantedMode);
}
void OnGUI ()
{
GUILayout.BeginVertical ();
// Release cursor on escape keypress
if (Input.GetKeyDown (KeyCode.Escape))
Cursor.lockState = wantedMode = CursorLockMode.None;
switch (Cursor.lockState)
{
case CursorLockMode.None:
GUILayout.Label ("Cursor is normal");
if (GUILayout.Button ("Lock cursor"))
wantedMode = CursorLockMode.Locked;
if (GUILayout.Button ("Confine cursor"))
wantedMode = CursorLockMode.Confined;
break;
case CursorLockMode.Confined:
GUILayout.Label ("Cursor is confined");
if (GUILayout.Button ("Lock cursor"))
wantedMode = CursorLockMode.Locked;
if (GUILayout.Button ("Release cursor"))
wantedMode = CursorLockMode.None;
break;
case CursorLockMode.Locked:
GUILayout.Label ("Cursor is locked");
if (GUILayout.Button ("Unlock cursor"))
wantedMode = CursorLockMode.None;
if (GUILayout.Button ("Confine cursor"))
wantedMode = CursorLockMode.Confined;
break;
}
GUILayout.EndVertical ();
SetCursorState ();
}
void Update ()
{
rotationX += Input.GetAxis("Mouse X") * cameraSensitivity * Time.deltaTime;
rotationY += Input.GetAxis("Mouse Y") * cameraSensitivity * Time.deltaTime;
rotationY = Mathf.Clamp (rotationY, -90, 90);
transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
if (Input.GetKey (KeyCode.LeftShift) || Input.GetKey (KeyCode.RightShift))
{
transform.position += transform.forward * (normalMoveSpeed * fastMoveFactor) * Input.GetAxis("Vertical") * Time.deltaTime;
transform.position += transform.right * (normalMoveSpeed * fastMoveFactor) * Input.GetAxis("Horizontal") * Time.deltaTime;
}
else if (Input.GetKey (KeyCode.LeftControl) || Input.GetKey (KeyCode.RightControl))
{
transform.position += transform.forward * (normalMoveSpeed * slowMoveFactor) * Input.GetAxis("Vertical") * Time.deltaTime;
transform.position += transform.right * (normalMoveSpeed * slowMoveFactor) * Input.GetAxis("Horizontal") * Time.deltaTime;
}
else
{
transform.position += transform.forward * normalMoveSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
transform.position += transform.right * normalMoveSpeed * Input.GetAxis("Horizontal") * Time.deltaTime;
}
if (Input.GetKey (KeyCode.Q)) {transform.position += transform.up * climbSpeed * Time.deltaTime;}
if (Input.GetKey (KeyCode.E)) {transform.position -= transform.up * climbSpeed * Time.deltaTime;}
}