Ray from camera not working in VR?
Hi, right now I have code in place to pick up a cube in my game. The code is in a child of a main camera, which itself is a child of a RigidBodyFPSController.
public class PickUpScript : MonoBehaviour {
GameObject MainCamera;
bool carrying = false;
GameObject carriedObject;
public float distance;
public float smooth;
// Use this for initialization
void Start () {
MainCamera = GameObject.Find("MainCamera");
}
// Update is called once per frame
void Update () {
if(carrying == true)
{
carry(carriedObject);
checkDrop();
}
else
{
pickUp();
}
}
void carry(GameObject o)
{
o.transform.position = Vector3.Lerp(o.transform.position, MainCamera.transform.position + MainCamera.transform.forward * distance, Time.deltaTime * smooth);
}
void pickUp()
{
if(Input.GetKeyDown(KeyCode.E))
{
int x = Screen.width / 2;
int y = Screen.height / 2;
Ray ray = MainCamera.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y));
RaycastHit hit;
if(Physics.Raycast(ray, out hit))
{
Debug.Log(hit.collider);
PickUpAble p = hit.collider.GetComponent<PickUpAble>();
if(p != null)
{
carrying = true;
carriedObject = p.gameObject;
p.gameObject.GetComponent<Rigidbody>().isKinematic = true;
}
}
}
}
void checkDrop()
{
if(Input.GetKeyDown(KeyCode.E))
{
dropObject();
}
}
void dropObject()
{
carrying = false;
carriedObject.gameObject.GetComponent<Rigidbody>().isKinematic = false;
carriedObject = null;
}
}
When i'm testing it normally, the code works fine. However, when I try doing it with my Oculus DK2, the ray doesnt hit the cube unless I have my mouse in a certain place up or down the screen, and the cube only follows the mouse, not when I look around with the headset.
What's really frustrating is that the code was working fine in VR, then I saved my scene, my project, closed Unity, and then reopened it. I didn't touch anything, everything was exactly where it was, and the code stopped working. How can I get it to work again?
Thanks.
I have this same problem, where the screen coordinates mismatch whenever "Virtual Reality supported" is ticked on in the player settings.
It's easy to replicate by debugging Camera.main.ScreenPointToRay(Input.mousePosition) in the game window with the VR support on and off.