I did a couple of tests a while ago with 2k enemies and my framerate didn’t go above 45.
They were composed of 2k GameObjects containing each: a Animator and another GameObject containing: SkinnedMeshRenderer(3 materials).
I heard that you can have a single object that calls Graphics.DrawMesh, but there is no ‘Graphics.DrawSkinnedMesh’. There is the ‘SkinnedMeshRenderer.BakeMesh’ but there is no place to send the Animator as a parameter.
I would consider increasing the number of enemies, but not decreasing it.
After about a day tweeking stuff, i’ve managed to get something done, though the solution is not what i’d want, it works.
Each frame, i set the Animator to play a certain clip at a certain timeframe, then on the next cycle, i fetch the updated and skinned mesh from the SkinnedMeshRenderer with BakeMesh.
That is a terrible solution, but it works, you can speed it up by making more Animator + SkinnedMeshRenderer, etc…
Now i can use Graphics.DrawMesh to draw the far away enemies, having only 50 or so being actually rendered by SkinnedMeshRenderer.