I would like to thank everyone in this topic as this allowed me to do something AWESOME! 
So I’ll share my little work with you. (Might give some evil idea to some).
I was looking around to find a solution (easy to implement and modify) so that I could take some specific things disappear from the camera based on the orientation of a gameobject (a head to be precise). The thing is that I could not use the trick of detecting the gameobject from the front of the player via the player’s head because it had to manage the gameobject even when they are not forward (so that they can become visible and invisible).
So the solution was to do it in reverse! Since it’s not “all” the game object that can disappear, but only some (NPCs for example) I created the following script which is placed on every game object that can become invisible if not forward of the player. That way, I remove the insane problem of detecting if every game object needs or not to be disabled simply by not placing this script on those who shall stay visible at all time (like the background/environment).
Then the only thing I had to change was the “order” as well as storing the player’s head into a persistent script. In this case, it’s a script called GameInformation which is always present (and can’t be destroyed) while it stores any temporary data I need to keep at all time in the game (things like game options, boolean and floats that should be kept between scene like the distance between the character and the camera in 3rd person view, etc.) When a scene start, I update it with a script placed on the bone of the character’s head that tells GameInformation that it’s the “PlayerHead”.
Then this little script does the rest for each toggled game object.
using UnityEngine;
using System.Collections;
public class FoWCaster : MonoBehaviour {
public FoWCaster Instance;
private bool isVisible;
private Renderer _renderer;
void Awake(){
Instance = this;
_renderer = GetComponent<Renderer> ();
}
void Update () {
if (_renderer.enabled != isVisible) {
UpdateVisibility();
}
Vector3 directionToTarget = GameInformation.PlayerHead.transform.position - transform.position;
float angle = Vector3.Angle(GameInformation.PlayerHead.transform.forward, directionToTarget);
float distance = directionToTarget.magnitude;
if (Mathf.Abs (angle) < 90 && distance < 100) {
isVisible = false;
} else {
isVisible = true;
}
}
void UpdateVisibility(){
_renderer.enabled = isVisible;
}
}
And BAM! Now everything that is not in front of the head with this script disappears! I could actually do something else like changing the texture or anything I really want (just have to change the stuff in UpdateVisibility()
This is especially useful for concept in which you allow a player to change from 1st person view and 3rd person view, but don’t want the said player to see more in 3rd person view than what he or she sees in 1st person view. Or even better, if you wish to not implement a FoV limit yet don’t want people with huge wide screens (or more than one screen) to see more than those with thinner or single screens. (They could see the background, but not the enemy players that are out of bound)
This is how great this topic have helped me. Thanks!
PS. If you wonder what FoWCaster means as it’s the name of the script… it just means “Fog of War Caster”.