public Vector3 GetMousePositionOnMapWorldSpace(Vector3 mousePositionScreenSpace) { //any distance greater than 0 should work, we only need to form a line equation. mousePositionScreenSpace.z = 1f; var startingPoint = _currentCamera.transform.position; var endPoint = _currentCamera.ScreenToWorldPoint(mousePositionScreenSpace); var mapY = _mapTransform.position.y; var(x, z) = LineEquations.GetXzGivenY(mapY, startingPoint, endPoint); return(new Vector3(x, mapY, z)); }
/// <summary> /// Finding 4 intersection point of camera frustum on the infinite plane(at mapTransform's height). /// Returning the maximum size of a rect that it can be bounded within the 4 intersection point. /// </summary> public (float minWidth, float distanceToTop, float distanceToBottom) GetViewDistanceToFrustumOnPlaneInWorldSpace( Camera editorCamera, Transform mapTransform) { var cameraFrustumCorners = GetFrustumCorners(editorCamera); var cameraPosition = editorCamera.transform.position; var targetYPosition = mapTransform.position.y; var intersectionCorners = new Vector3[cameraFrustumCorners.Length]; for (var i = 0; i < cameraFrustumCorners.Length; i++) { var(x, z) = LineEquations.GetXzGivenY(targetYPosition, cameraPosition, cameraFrustumCorners[i]); intersectionCorners[i] = new Vector3(x, targetYPosition, z); } var distanceToTop = intersectionCorners[1].z - cameraPosition.z; var distanceToBottom = cameraPosition.z - intersectionCorners[0].z; var minWidth = intersectionCorners[3].x - intersectionCorners[0].x; return(minWidth, distanceToTop, distanceToBottom); }