Creating a Game in Unity – Workflow issues…
One of the hardest things about creating a new game is figuring out how you are actually going to make it. I don’t mean the programming or the graphics, or even the level design – these things can be changed much later in the project without too much hassle. I’m talking about which pieces of software you will use to create the levels and how they will interact.
For example, my latest game is an offroad car racing game based on a series of islands. That was the basic idea at least. There will be different types of level – things like “get from point A to point B in a time limit”. And I am going to use Unity3D, because it is amazing. But once you have a basic idea and fire up the IDE of your choice, where do you go from there? I have spent the last 3 weeks designing different islands, laying things out and trying a number of Unity packages trying to establish how these islands will be created. Once I have that I can start working on actual game mechanics.
I have worked out that I need to use several packages from the excellent Unity Asset store. Number one on my list is GAIA – an amazing terrain generator that I really like. I have tried a few, but they all seem really complex. GAIA allows me to create a random terrain very quickly, then tweak it as I see fit. So that is step one of the island workflow sorted. But then I ran into performance issues – my PC has a Core i7 920 processor with 12GB RAM and a Radeon HD 7770 graphics card. But even with a blank terrain I was struggling to get 30fps. That is where most of the last 3 weeks has been spent – trying to get a decent frame rate! Finally I uninstalled / reinstalled the latest graphics card drivers – and instantly jumped to 60fps. So that’s 3 weeks wasted 🙁
Here is a breakdown of the sort of packages I need:
- Water (AQUAS looking like the current favourite)
- Terrain shader (the default Unity shader looks a bit rubbish at distances)
- Car physics (a straight choice between Edy’s and Realistic Car Controller)
- Loads of pre-built objects (because I am rubbish at graphics)
- Dynamic time-of-day system (or just a plain skybox?)
- Something to speed up Unity’s trees & grass
- I have already bought TreesManagerSystem, hoping that the next version (uNature) will help with this
Hopefully I will be integrating these soon. Things like water and time-of-day systems won’t have too much of an effect on the workflow. I will probably build them as prefab object to be loaded at runtime anyway. Same goes for the terrain shader – just apply it to the terrain. The main impact I will need to be wary of is performance. The trees and grass are a bit more important though, as they form the basis of the island design. I have spent lots of time experimenting with Unity trees vs SpeedTrees – the SpeedTrees certainly look great, but I think they run slower (bit of a rubbish name then!). They also require a separate editor if you want to tweak them. So I’ll probably stick with Unity trees for now. With some more careful level design and tree placement I will try to minimize areas where the car can drive through dense trees as that really seems to slow things down.
In summary then – I’ve spent 3 weeks faffing about. Time to concentrate on some more important things, like level design and the UI.