protected bool CanSee(GameObject obj) { // if the enemy is inside the distance and inside vision angle Vector3 distanceFromMeToObjectVector = obj.transform.position - this.transform.position; float angleToObject = Vector3.Angle(distanceFromMeToObjectVector, this.transform.forward); //if the enemy is not behind walls RaycastHit hitInfo; Vector3 rayToObj = obj.transform.position - this.transform.position; if (Physics.Raycast(this.transform.position, rayToObj, out hitInfo)) { //To Do If a teammate is in front the ray hits it first if (hitInfo.transform.gameObject.tag == "piece" && distanceFromMeToObjectVector.magnitude < piece.GetVisionDistance() && angleToObject < piece.GetVisionAngle()) { //avoid tilt distanceFromMeToObjectVector.y = 0; return(true); } } return(false); }