If you are a traditional game programmer such as myself, and never really dealt much with scripting then learning some of the paradigms of Unity3D can be somewhat shocking. It's easy to learn once you change the way you think about how you are making games. Here are a few things I wish I would have known about Unity3D.
I started looking into Unity a while ago after seeing all the cool stuff people were building with it and hearing about how easy it was to build games with.
My background up to this point had been building games for windows, the traditional build everything yourself way. When the mobile craze hit, I started working on mobile games using Marmalade which was a natural transition for me. Everything worked exactly the same and I was able to port a lot of my tech over without too many issues.
After having built a few mobile games I started looking into Unity3D. It was very different than what I was working with up to this point. What really attracted me to it was that in my mind, I had always envisioned building a tech similar to this for creating games. My dream engine looked a lot like unity, where games could be built by using high level game objects to which components could be attached. I built this concept in my Rebel Tech engine, except instead of running script you would simply attach C++ classes to objects to give them interesting behaviors. Basically Unity3d to me was what I would have taken me 30 years to build by myself.
My dog's reaction to Unity3D's awesomeness
This is a list of things I wish I would have known when I first opened up Unity3D, I like learning by just tinkering around with stuff so I'm sure some these could have been learned by just RTFM.
1. There is no
spoon main loop. Game Objects, and Prefab hierarchies are the name of the game.
2. Inline with number one, unity works at a much higher level than I normally worked at.
3. Enable source control mode if you will be using svn/git.
4. You can expose custom objects to the editor by using the serializable attribute, and if you find yourself manually loading prefabs from the /Resources path... there is most likely a more elegant solution.
5. Learn and use Update, FixedUpdate and LateUpdate each has its own purpose and helps to solve specific problems.
6. The asset store can save you a TON of coding time.
Here are a few other features that I found very useful in Unity
1. You can use Visual Studio as your editor. C# + ReSharper was awesome!
2. The asset pipeline is pure win, being able to import models and use them right away is great for iteration. FBX is my preferred format, I export everything as FBX and import into Unity3D.
3. Work on multiple platforms easily, I was a windows guy until fairly recently when I purchased a mac as my main machine. I was able to pick up right where I left off without problems (Still getting used to MonoDevelop).
4. MonoDevelop, a great IDE packaged with Unity.
5. Unity3D is surprisingly stable across the smorgasbord of Android devices. This was something I was worried about when switching to unity, I feared that I would run across strange crashes related to engine internals that I would be unable to fix. That didn't happen :)
What did I create with Unity3D?
Galactic Run built with Unity3D
Galactic Run, a cool bullet hell style space shooter. Not bad for a months work.
Since then I've been creating prototypes and I've finally decided on my next game which I am actively developing, a space roguelike of the coffee break variety.
This entry is a report of this blog entry on my website.