Is object at least partly visible?

Hi, I need to check if my camera is able to see a particular object. It doesn’t need to see the whole object, it’s enough if it’s only partly visible. At the moment I’m using the IsVisibleFrom() Function. But this function only checks if the object is rendered. Sadly it’s also rendered if another object obscures it completly. I think I will have to use Raycasts but my camera is not only a point, and that’s why I can’t find a solution.

You can cast a line from the eight corners of the renderer.bounds to the camera. This is not a perfect solutions since it is testing the bounding box rather than the mesh itself. I’m not sure how expensive it is, but here is a function:

bool IsBlocked()
{
	Vector3 v3Corner = Vector3.zero;
	Vector3 v3Center = renderer.bounds.center;
	Vector3 v3Extents = renderer.bounds.extents;
	
	v3Corner.Set(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z);  // Front top left corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;
	v3Corner.Set(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z);  // Front top right corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;	
	v3Corner.Set(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z);  // Front bottom left corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;	
	v3Corner.Set(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z);  // Front bottom right corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;	
	v3Corner.Set(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z);  // Back top left corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;
	v3Corner.Set(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z);  // Back top right corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;	
	v3Corner.Set(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z);  // Back bottom left corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;	
	v3Corner.Set(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z);  // Back bottom right corner
	if (!Physics.Linecast (v3Corner, Camera.main.transform.position))
		return false;	
	
	return true;
}