I have a couple hundred NavMeshAgents that can follow the player. When they follow the player, they're all focusing on a single point, which gets messy to say the least. If the player stands still, they all bunch up into one blob, a blob that sends the player through the ground when touched. They also bunch up when moving if the player is far, since the paths all converge, so they clump up in transit. I want to avoid the bunching up, but have been struggling to find a method that doesn't have issues.
I started with the NavMeshAgent solutions first. I tried setting the distance tolerance higher, but this ends up with agents however far from the player, and bunching up on the border. I've also tried using the natural avoidance on the agents, setting the avoidance priority randomly. With this many agents though, it ends up doing nothing, and they still bunch up
I tried a boid system, but it doesn't seem to work too well for anything slightly more complex than a bird or a fish. I'm mostly using separation. Cohesion and alignment clash way too much with the NavAgents, and isn't really applicable anyways. I'm calling NavAgent.move() with the separation vector. It does work pretty well when they're in motion, but not so much when they get close to their destination. The agent and boid components clash, with agents trying to clump up, and boids trying to separate. The boids system also makes things pretty slow, even though I'm using 2d spatial hashing for finding neighbors