Find out if GameObject is in Field of View

I try to calculate if a GameObject is in Field of View of my Camera.

Edit: Becouse if not i want to disable the MeshRenderer of the GameObject.

Is there a buld in function i didnt find till now? Right now im using this code snippet which looks to work right. But im not sure.

Vector3 cameraRelative = _camTransform.InverseTransformPoint(gO.transform.position);
Vector3 screenPos = _cam.WorldToScreenPoint(gO.transform.position);

if (screenPos.x > 0 && screenPos.x < Screen.width && screenPos.y > 0 && screenPos.y < Screen.height && cameraRelative.z > 0)
// The object is in front of the camera
_inView = true;
else
// The object is behind the camera
_inView = false;

2 Answers

2

You can just use this:

bool visible = renderer.isVisible

Perfect! Thank you!

I cheered to fast. I have a little problem. After i disable the rendere. I, not able to Enable it again, because after that renderer.isVisible is always false.

Why do you need to disable the renderer if it's out of view again? it's not being rendered

Ahhh! If the renderer is not vissible it will not be rendered at all? So i can use isVisible only for my calculations? I testet it and it look that it works in this way!

Nice if(AI_Man_Mesh.renderer.isVisible){ Debug.Log("I can see a you mr AI man!!"); } Handy!

There's an option to stop animations if the object is not in view

http://unity3d.com/support/documentation/ScriptReference/Animation-animateOnlyIfVisible.html

Sorry I sayd the wrong thing. I dont use the Animation Class from Unity, instead i using the iTween library. Also i want to disable the MeshRenderer on the GameObjects not in view.