Camera.WorldToScreenPoint strange behaviour

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