public static ClipPlaneVertexes GetClipPlaneAt(Vector3 pos) { var clipPlane = new ClipPlaneVertexes(); if (Camera.main == null) { return(clipPlane); } Transform transform = Camera.main.transform; float offset = Camera.main.nearClipPlane; clipPlane.UpperLeft = pos - transform.right * halfPlaneWidth; clipPlane.UpperLeft += transform.up * halfPlaneHeight; clipPlane.UpperLeft += transform.forward * offset; clipPlane.UpperRight = pos + transform.right * halfPlaneWidth; clipPlane.UpperRight += transform.up * halfPlaneHeight; clipPlane.UpperRight += transform.forward * offset; clipPlane.LowerLeft = pos - transform.right * halfPlaneWidth; clipPlane.LowerLeft -= transform.up * halfPlaneHeight; clipPlane.LowerLeft += transform.forward * offset; clipPlane.LowerRight = pos + transform.right * halfPlaneWidth; clipPlane.LowerRight -= transform.up * halfPlaneHeight; clipPlane.LowerRight += transform.forward * offset; return(clipPlane); }
float CheckCameraClipPlane(Vector3 from, Vector3 to) { var closestDistance = -1f; RaycastHit hitInfo; ClipPlaneVertexes clipPlane = GetClipPlaneAt(to); Debug.DrawLine(clipPlane.UpperLeft, clipPlane.UpperRight); Debug.DrawLine(clipPlane.UpperRight, clipPlane.LowerRight); Debug.DrawLine(clipPlane.LowerRight, clipPlane.LowerLeft); Debug.DrawLine(clipPlane.LowerLeft, clipPlane.UpperLeft); Debug.DrawLine(from, to, Color.red); Debug.DrawLine(from - transform.right * halfPlaneWidth + transform.up * halfPlaneHeight, clipPlane.UpperLeft, Color.cyan); Debug.DrawLine(from + transform.right * halfPlaneWidth + transform.up * halfPlaneHeight, clipPlane.UpperRight, Color.cyan); Debug.DrawLine(from - transform.right * halfPlaneWidth - transform.up * halfPlaneHeight, clipPlane.LowerLeft, Color.cyan); Debug.DrawLine(from + transform.right * halfPlaneWidth - transform.up * halfPlaneHeight, clipPlane.LowerRight, Color.cyan); if (Physics.Linecast(from, to, out hitInfo) && hitInfo.collider.tag != "Player") { closestDistance = hitInfo.distance - Camera.main.nearClipPlane; } if (Physics.Linecast(from - transform.right * halfPlaneWidth + transform.up * halfPlaneHeight, clipPlane.UpperLeft, out hitInfo) && hitInfo.collider.tag != "Player") { if (hitInfo.distance < closestDistance || closestDistance == -1) { closestDistance = Vector3.Distance(hitInfo.point + transform.right * halfPlaneWidth - transform.up * halfPlaneHeight, from); } } if (Physics.Linecast(from + transform.right * halfPlaneWidth + transform.up * halfPlaneHeight, clipPlane.UpperRight, out hitInfo) && hitInfo.collider.tag != "Player") { if (hitInfo.distance < closestDistance || closestDistance == -1) { closestDistance = Vector3.Distance(hitInfo.point - transform.right * halfPlaneWidth - transform.up * halfPlaneHeight, from); } } if (Physics.Linecast(from - transform.right * halfPlaneWidth - transform.up * halfPlaneHeight, clipPlane.LowerLeft, out hitInfo) && hitInfo.collider.tag != "Player") { if (hitInfo.distance < closestDistance || closestDistance == -1) { closestDistance = Vector3.Distance(hitInfo.point + transform.right * halfPlaneWidth + transform.up * halfPlaneHeight, from); } } if (Physics.Linecast(from + transform.right * halfPlaneWidth - transform.up * halfPlaneHeight, clipPlane.LowerRight, out hitInfo) && hitInfo.collider.tag != "Player") { if (hitInfo.distance < closestDistance || closestDistance == -1) { closestDistance = Vector3.Distance(hitInfo.point - transform.right * halfPlaneWidth + transform.up * halfPlaneHeight, from); } } return(closestDistance); }
public ClipPlaneVertexes GetClipPlaneAt(Vector3 pos) { var clipPlane = new ClipPlaneVertexes(); Camera camera = gameObject.GetComponent <Camera>(); if (camera == null) { return(clipPlane); } Transform transform = camera.transform; float offset = camera.nearClipPlane; clipPlane.UpperLeft = pos - transform.right * halfPlaneWidth; clipPlane.UpperLeft += transform.up * halfPlaneHeight; clipPlane.UpperLeft += transform.forward * offset; clipPlane.UpperRight = pos + transform.right * halfPlaneWidth; clipPlane.UpperRight += transform.up * halfPlaneHeight; clipPlane.UpperRight += transform.forward * offset; clipPlane.LowerLeft = pos - transform.right * halfPlaneWidth; clipPlane.LowerLeft -= transform.up * halfPlaneHeight; clipPlane.LowerLeft += transform.forward * offset; clipPlane.LowerRight = pos + transform.right * halfPlaneWidth; clipPlane.LowerRight -= transform.up * halfPlaneHeight; clipPlane.LowerRight += transform.forward * offset; return(clipPlane); }
public static ClipPlaneVertexes GetClipPlaneAt(Vector3 pos) { var clipPlane = new ClipPlaneVertexes(); if (Camera.mainCamera == null) return clipPlane; Transform transform = Camera.mainCamera.transform; float offset = Camera.mainCamera.nearClipPlane; clipPlane.UpperLeft = pos - transform.right * halfPlaneWidth; clipPlane.UpperLeft += transform.up * halfPlaneHeight; clipPlane.UpperLeft += transform.forward * offset; clipPlane.UpperRight = pos + transform.right * halfPlaneWidth; clipPlane.UpperRight += transform.up * halfPlaneHeight; clipPlane.UpperRight += transform.forward * offset; clipPlane.LowerLeft = pos - transform.right * halfPlaneWidth; clipPlane.LowerLeft -= transform.up * halfPlaneHeight; clipPlane.LowerLeft += transform.forward * offset; clipPlane.LowerRight = pos + transform.right * halfPlaneWidth; clipPlane.LowerRight -= transform.up * halfPlaneHeight; clipPlane.LowerRight += transform.forward * offset; return clipPlane; }