Home > OS >  Converting mouse (touch) position with ScreenToWorldPoint doesn't work
Converting mouse (touch) position with ScreenToWorldPoint doesn't work

Time:05-04

I googled as much as I could, but no solution.

Aim: change touch coordinates from pixels (screen left-bottom corner x0) to game coordinates in a 3D environment, although I don't need the Z position, because the camera is not moving, and I just need to track the X position and with the current state my clicks (touches) are always at positive X.

Code:

void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        Vector3 touchPos = Camera.main.ScreenToWorldPoint(touch.position);
        touchPos.z = 3;
        if (touch.phase == TouchPhase.Stationary)
        {
            if (touch.position.x < 0)
                turnSpeed = 8f;
            else if (touch.position.x > 0)
                turnSpeed = -8f;
        }

        if (touch.phase == TouchPhase.Ended)
        {
            turnSpeed = 0f;
        }
    }
}

Camera position: x: 0.027 y: 3.847 z: -2.238. I've tried setting touchPos.z = from -3 to 10., but no luck.

CodePudding user response:

Thanks to shingo, here's the solution:

  1. Change If (touch.position.x < 0) to if (touchPos.x < 0);

  2. Set the Z value before or when calling ScreenToWorldPoint. I went with:

     Vector3 touchPos = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 0.3f));
    
  • Related