If you wish to create a sport with lots of interacting objects in it, then that seems like a use-case for entities. You possibly can consider entities as a extra light-weight various to sport objects. They are not managed by MonoBehavior scripts, however by Techniques executing Burst jobs. It is a very completely different programming paradigm than you normally use in Unity, and the training curve is somewhat steep. However the efficiency enhancements on video games with a really massive variety of objects might be price it.
Once you wish to have lots of objects not simply within the sport however on the display screen as properly, then you may obtain nice efficiency enhancements using completely different “Ranges of Element“. The essential thought is that objects which might be additional away from the digital camera get changed with less complicated variations of them. So you’d solely use your 40k meshes for characters very near the digital camera. Characters additional away get changed with low-poly fashions with simplified armature and animation (you needn’t animate fingers and faces when they’re too far-off to acknowledge). And characters which might be so far-off within the distance that they’re just some pixels may even get changed with an “Imposter” with out the participant noticing. An Imposter is a pre-rendered 2nd sprite that depicts the 3d character (identical to DOOM did within the early 90s), so that you get down from 40k triangles to simply 2. When utilizing GameObjects, then you are able to do imposters utilizing the BillboardRenderer part. I’m not really certain if that part is supported with entity graphics, but when it isn’t it should not be so laborious to roll your individual.
There are after all much more efficiency optimizations to be achieved in Unity to get some extra FPS out of advanced scenes with a lot of objects, however one might write an entire ebook about that.