Here's a few ways I would try to go about it:
---
Method one (simple):
Assign a cone shaped area to your camera and when the enemy enters the area, have your enemy act accordingly. You could also check from the enemy, assigning a cone shaped area in front of it and checking if the player enters it and acting then.
The problem with this method, is that it has no idea if a block is in front of it or not! A way to get around this is to make the cone relatively short, so that the player/enemy wouldn't be able to get into the area through a block.
Method two (complicated):
Assign a cone shaped area to your camera and when it detects an enemy, send a raycast towards it. If the raycast hits the enemy, then you can see the enemy, and if the raycast doesn't hit the enemy then there is something in the way. This can also be done from the enemy, you just have to change whom you assign the area to and where you project the raycast from.
The issue that makes this method complicated is figuring out how to angle the raycast towards the target. (I haven't really had a lot of luck with raycast aiming... But maybe it's just me?)
Method three (potentially costly):
Like you said, you could send multiple raycasts out of the enemy at slightly different angles, but this could grow costly if you have too many enemies.
One way to get around it, is to check the enemies distance from the player, and only send raycasts out when the player is close.
Another way is to break your game world into chunks and only send raycasts out from the enemies in the active chunk, leaving the other enemies in other chunks without raycasts.
A third way to handle this, is you could send the raycasts out from the player, and when it hits an enemy then have the enemy react. Enemies will only react when you see them though, so they couldn't do things like sneak up from behind or move towards you before you see them.
Of course, if you implement this and don't notice any slowdown, then I wouldn't worry to much about optimizing!
Hopefully these will give you some ideas on how to go about it. I haven't actually tested/used any of these methods, so they are more theoretical than actual working methods, but these are the methods I would try if I was trying to make a 3D cone of sight.