Ok ive been searching for a while now and I havent found anyone that answers my question, I want to know if there is a built-in fuction/script that identifies if a certain object is in the cameras field of view, I am not sure is render.isVisible will work cause as far as I know it is only for rendering purpose, right? And I can’t use a raycast cause it is only a line and I need to cover the full view of the camara, please HELP…
Hey guys I managed to identify when a certain object was in front of the camera
var gameObject : GameObject;
var see : boolean = false;
function Update()
{
if(gameObject.renderer.isVisible)
{
see = true;
}
else
{
see = false;
}
}
function Update () {
var fwd = transform.TransformDirection (Vector3.forward);
if (Physics.Raycast (transform.position, fwd, 10)) {
print (“There is something in front of the object!”);
}
}
Also, here is a script ( a bit more advanced including easing and detection of left/right -obstacle avoidance ) . . . PS: Not the most intuitive though;
#pragma strict
var Target : GameObject ;
var TargetHit : RaycastHit ;
var TargetHitLeft : RaycastHit ;
var TargetHitBack : RaycastHit ;
class _VisionRaycastHit{
var Back : RaycastHit ;
var Front : RaycastHit ;
var Left : RaycastHit ;
var Right : RaycastHit;
}
class _VisionDirection {
var Left : float = 0 ;
var Right : float = 0 ;
var LeftActive : boolean = false ;
var RightActive : boolean = false ;
}
class _Vision {
var Back : boolean = false ;
var Front : boolean = false ;
var Left : boolean = false ;
var Right : boolean = false ;
var EaseOut : float = 2 ;
var Hit : _VisionRaycastHit ;
var VisionDirection : _VisionDirection ;
}
var Vision : _Vision = new _Vision ( ) ;
function Start () {
}
function Update () {
Vision.Front = Physics.Raycast(Vector3(transform.position.x, transform.position.y+1, transform.position.z), transform.TransformDirection( Vector3.forward ), Vision.Hit.Front, 15);
Vision.Back = Physics.Raycast(Vector3(transform.position.x, transform.position.y+1, transform.position.z), transform.TransformDirection( Vector3.back ), Vision.Hit.Back, 15);
Vision.Left = Physics.Raycast(Vector3(transform.position.x, transform.position.y+1, transform.position.z), transform.TransformDirection( Vector3.left ), Vision.Hit.Left, 15);
Vision.Right = Physics.Raycast(Vector3(transform.position.x, transform.position.y+1, transform.position.z), transform.TransformDirection( Vector3.right ), Vision.Hit.Right, 15);
//VisionLeft = Physics.Raycast(Vector3(transform.position.x, transform.position.y+1, transform.position.z), transform.TransformDirection( Vector3.left), TargetHitLeft, 15);
//VisionBack = Physics.Raycast(Vector3(transform.position.x, transform.position.y+1, transform.position.z), transform.TransformDirection( Vector3.forward ), TargetHitBack, 15);
var Direction : Vector3 ;
Direction = ( transform.TransformDirection ( Vector3.forward ) ) ;
if ( Vision.Front )
{
if ( Vision.Left )
{
Vision.VisionDirection.Right += 5 * Time.deltaTime ;
Vision.VisionDirection.RightActive = true ;
}else if ( Vision.Right ){
Vision.VisionDirection.Left += 5 * Time.deltaTime ;
Vision.VisionDirection.LeftActive = true ;
}
if ( Vision.VisionDirection.LeftActive ){
transform.rotation = Quaternion.Slerp ( transform.rotation, Quaternion.LookRotation ( - ( transform.position - Vector3(Target.transform.position.x-Vision.VisionDirection.Left , Target.transform.position.y, Target.transform.position.z) ) ), 1 * Time.deltaTime ) ;
//Vision.EaseOut = 245 ;
}else if ( Vision.VisionDirection.RightActive ){ // If Turning Right
transform.rotation = Quaternion.Slerp ( transform.rotation, Quaternion.LookRotation ( - ( transform.position - Vector3(Target.transform.position.x+Vision.VisionDirection.Right , Target.transform.position.y, Target.transform.position.z) ) ), 1 * Time.deltaTime ) ;
Vision.EaseOut = 2 ;
}else{ // Turn Right By Default
transform.rotation = Quaternion.Slerp ( transform.rotation, Quaternion.LookRotation ( - ( transform.position - Vector3(Target.transform.position.x+Vision.VisionDirection.Right , Target.transform.position.y, Target.transform.position.z) ) ), 1 * Time.deltaTime ) ;
Vision.EaseOut = 2 ;
}
}else{
transform.position += Direction * Time.deltaTime ;
if ( Vision.Right == false && Vision.Left == false ){
if ( Mathf.Ceil ( Vision.EaseOut ) == 0 ){
Vision.VisionDirection.LeftActive = false ;
Vision.VisionDirection.RightActive = false ;
}else{
Vision.EaseOut -= 1 * Time.deltaTime ;
}
}
if ( !Vision.VisionDirection.RightActive && !Vision.VisionDirection.LeftActive ){
///transform.rotation = Quaternion.Slerp ( transform.rotation, Quaternion.LookRotation ( - ( transform.position - Vector3(Target.transform.position.x , Target.transform.position.y, Target.transform.position.z) ) ), 1 * Time.deltaTime ) ;
}
if ( Vision.Right )
{
Vision.EaseOut = 2 ;
}else if ( Vision.Left ){
Vision.EaseOut = 2 ;
}
}
}
Camera.main.WorldToScreenPoint(trashBin.transform.position)
This should help you find the point on the camera that an object occupies
Screen.width and Screen.height
Once you get a point on the camera then you can check if doesn’t exceed these values or is less than 0. If so then a point is on the screen.
Note: I am not sure what happens when point is behind camera (and still is registered on the screen, but you should be able to filter it out with Vector.Angle being greater than 90 (maximum view angle)