Big dynamic universe in unity?

I am evaluating unity as an option to creating the game I would like to make.

What are the limitations on the size of the 'universe' in unity? If for instance I wanted different planets on which all NPC's are dynamically moving about/interacting with each other, is this possible in unity? I assume that would mean that I had multiple scenes with scripts running at the same time.

Also, what are the practical limitations on a single scene? How big can it be? How many npc's can be wandering about the scene on how big of a map?

I am aware that you can communicate with a web server to dynamically load scenes, however, I imagine there would be flaws with this method for a large dynamic game: your server code might not model the movement of the npc's the same as they would be moving about the landscape in a running scene in unity.

It's certainly possible.

However, it's not a matter of Unity being able to do it, it is a matter of you being able to do it. Doing large dynamic worlds of any kind means you need loads of level-of-detail, scaling, compression, streaming, etc.

The size of a scene is kind of limited by floating point precision. Travel really far from the center coordinate, and you'll start to see jittery behaviour. This can be remedied by building your own, more scalable coordinate system on top of Unity's system.

The amount of NPCs in a single scene all depends on how resource intensive a single npc is. Given a large number of fairly power-hungry npcs you will need to do some clever scaling, such as using simpler game logic and rendering for npcs that are far away.

The more of these systems you build, the bigger your game will be able to scale. But again, it's not up to Unity, it's mostly up to you. :)

For a large scale universe you’ll need to use double precision instead, and then cast them to floats when you need to do graphics. This will give you accuracy of +/- 1 meter or so in full scale simulations of the solar system as far out as Pluto. It will fall apart at the galactic level.

It’s against the terms of the license, but I bet you could use something like dotpeek (dotPeek: Free .NET Decompiler & Assembly Browser by JetBrains) to reverse engineer the Vector3 class and then tweak it to use doubles. Hypothetically speaking, you’d be surprised at how much is represented with doubles internally.

If I was going to make a double precision version of Vector3, I’m sure it would only be an hour or twos work. Not that I would of course.