It’s very difficult to tell whether something is actually complex or something Unity handles with brilliant efficiency in some not immediately obvious way. The lack of non-trivial examples doesn’t help.
For example there’s no real examples of abstract, persistent data handling. (I go into a scene, pick up an object, go to another scene, I still have that object. I pick up another object. Return to the first scene, the object I picked up is not in the scene.)
Now add the possibility that the object I picked up was randomly selected from an arbitrary pool of possible objects, including objects added to the pool after the scene was created.
OK now I quit the game, start it again, and it remembers where I am and which objects I picked up.
I’m sure Unity can handle all of this, just not sure how easily, and I have a checklist of things I am trying to figure out how to do (I actually have a design document). I’d like to avoid .NET if I can ;-).
I don’t think I’ll be able to avoid text i/o to implement conversations and quests.
I assume this can be done, effectively, in code when instancing something, and hope that I can do something like query Unity to get a list of available prefabs fitting some criteria. (E.g. I want to give a random bad guy a random gun with random ammo – not knowing in advance what the ultimate lists of bad guys, guns, and ammo will look like.)
(When we built Prince of Destruction we ended up making every darn thing scriptable. A door was a scripted terrain tile. This is a very flexible solution, but I’d love to avoid it.)
Edit: actually, making stuff scriptable is soooo useful. E.g. World of Warcraft’s entire UI is scriptable via LUA. How might similar things be achieved in Unity?
Another Edit: I’m thinking I might need to give concrete examples. Let’s suppose I’m writing an epic fantasy game (I’m not, but close enough). In it there will be 50 “arc” quests and 50 “mini” quests. Mini quests will be random (“A wants you to kill B for reward C”). There will be 25 kinds of critter, and 20 or so significant NPCs. Any NPC (significant or otherwise) belongs to one of 5 factions. So if NPC A gives you the “A wants you to kill B” quest, B will be from an opposing faction.
Items will be rated in terms of “level” and “value”. So if you – at level n – are asked to kill an NPC of level n+3 the reward will be an item of your level but high value, or of higher level but moderate value.
All of this screams out to be database driven, whether the database is SQL or just nicely formatted text or XML or whatever. If there’s a “right way” to do all this entirely in Unity, I haven’t the first clue what it is. Building each of these game objects as a prefab doesn’t seem viable. Building a single prefab of each canonical type (e.g. an “NPC” object) which assembles itself from available assets and properties on demand seems more viable, but I don’t yet know enough to (a) know if this can work, or (b) know if there’s a huge gotcha (e.g. it needs to contain every possible relevant geometry).