Possible to have AI idle when actor not in camera/screen?

So I’m working on visuals in an ocean environment. One of them being fish just swimming around doing nothing. They’re not meant for the player to do anything with, they’re just for visual effect. Just because it was fun practice, I made a basic AI that controls the fish. To make them move more fish-like. And they flee if the player gets close. Just a nice touch, that’s all. The problem is that this is a submarine game with a huge ocean. We’re not talking a tiny pond here. So for the fish to be a meaningful effect I need to spawn like a couple of hundreds in random locations. I quickly realized some 200+ AI controlled actors slowed down the game a lot.

The fish are just static meshes. Really low poly. So I doubt the amount of polys are the problem. I suspect the AI movement constantly going on is the problem. I’m not sure what the best approach is here.

  1. Add an overlap sphere to the fish blueprint. And only activate AI/movement until the player overlaps?

  2. Don’t spawn hundreds of fish at game start? Instead spawn random fish in front of player at runtime?

Option nr 2 sounds complicated. It would look odd if a fish randomly just appears in the frame for no reason. It also raises the question when to remove the fish and spawn a new one. I guess it could be done with some formulas for camera direction and stuff. Like, maybe keep track of when a fish swim out of frame and then destroy it and respawn another one. Far ahead enough in front of the camera. Or something. I get a headache just thinking about the math and formulas for it.

This sounds like a scenario UE probably already have a built in system for. Like, how do you deal with a Diablo kind of game for example? Where you might have thousands of enemies that spawn along the map? Would you spawn all of them at game start in some sort of disabled mode? Or would you spawn them as the player get close?