the function returns (110.9,-3.3,28.9) i have 2 questions
1)isn’t it supposed to return int?
2) why it returns negative y. it seems that the camera can see it.
the function returns (110.9,-3.3,28.9) i have 2 questions
1)isn’t it supposed to return int?
2) why it returns negative y. it seems that the camera can see it.
1- No, the screen coordinates returned are floats (a Vector3, where the Z component is the distance from the camera);
2- A 3D world point doesn’t need to be visible to be converted to screen coordinates - actually, even points behind the camera are returned in the screen space! It’s like an infinite line passing through the camera and the 3D point: if the point is behind the camera, the line still crosses the screen space and reports valid screen coordinates.
If you need to avoid off-screen results from WorldToScreenPoint, use a dot product to detect points behind the camera, and Rect.Contains to get only valid screen coordinates (code attached to the camera):
// checking if worldPoint isn't behind the camera: if (Vector3.Dot(transform.forward, worldPoint-transform.position) >= 0){ var screenPoint: Vector3 = camera.WorldToScreenPoint(worldPoint); // checking if screenPoint is inside the screen area: if (Rect(0, 0, Screen.width, Screen.height).Contains(screenPoint){ // screenPoint is a valid screen point } }
ok found a fix. my camera was perspective. when I changed it to orthographic it fixed it