I’ve got most of my Flash work on hold at the moment, because I’m basically abandoning my own Flash game engine in favor of the upcoming PushButton Engine. I invested a lot of time, blood and sweat into my own engine and even built a nice editor. But, the friction of trying to push that forward while also trying to prototype new ideas is enormous–especially after using Unity.
I will detail my thoughts and experiences with PushButton Engine in a later post (I haven’t used it much, and it’s not quite production ready), but I can offload a huge amount of effort and leverage the work of a bunch of really smart people. But, I digress.
This post is about Unity. It’s been about two weeks since I started working with Unity. Because it’s a 3d engine and doesn’t use ActionScript, it had the effect of forcing me to learn more than just the Unity API and editor.
I’ve become a 3d modeler. Yes, I’ve bitten the bullet and learned about Blender. Turns out it’s a really nice tool, it’s free, and it’s a lot of fun! I haven’t animated anything yet, but that’s coming up real soon.
I have created several models during my learning stages (over the past few months in between everything else), and I think one day I will be decent at it. I’ll never be great, but I can probably model most of the stuff my small projects will require. Albeit, this is something that will require a lot of practice. I don’t expect much in the way of pleasing results for a while. But that won’t stop me from making new games.
I’ve learned C#. Unity uses Mono (an implementation of .NET), and I don’t like UnityScript (ECMA script, basically) because that’s how I roll. I prefer a verbose, strongly typed, manly language, and C# delivers. It wasn’t hard to learn since it’s close to C++, ActionScript, and Java, and I know all of those already. I did buy a book, though, for reference and some deeper learning as my Unity projects increase in complexity. Overall, C# has been fun, but not as fun as learning Blender.
Here’s how I would sum up my experience with Unity from a total noob standpoint:
- Realize that almost every core game engine system is already implemented: input, physics, collision detection, rendering, runtime game object management, editing tools, web connectivity, asset management, etc. It’s all there.
- Hit a few annoying oversights: font handling, lack of collision groups/filtering, a very minor particle system missing feature (rotation/spin). Realize that you can still do 99% of what you want to without developing a huge infrastructure of your own.
- Proceed directly to game logic programming. Do not mess with low level minutia at all, other than learning the API.
- Become joyous and explode with glee.
So, yeah. Basically, you just go straight to the fun parts!
I am working on a simple learning project which I will release soon, and I honestly think that if I had known how to model, how to code C#, how to use Unity’s API that I could have made this game in a few days, tops. The art and sound will be more time consuming than making the game itself!
This is such a huge change from Flash, especially when I was slogging away on my own engine, trying to get to a point where I could do what I am now doing in Unity. I just want to get the heck on with making a game. I’m not the kind of guy who enjoys low level system programming. Some coders like that stuff, and–bless their hearts–now I don’t have to.
All the hype is true. Unity is everything you’ve heard that it is.
I won’t totally abandon Flash (yet), but at this point Flash has specific, limited utility (2d games that need a specific look and games that require massive audience reach) whereas before I viewed it as obvious and clearly superior choice for web games. No more!