Mini post mortem: puzzle game built in Unity

Here’s the link to my latest learning with Unity.

Puzzle Game Prototype (it’s only 6 levels, 5 of which are very easy, and the last one is too long/has no check points. I also forgot to mention that you move with WASD or Up/Down/Left/Right arrows. I haven’t added keyboard controls for restart, quit, and next level. And I haven’t even touched sound. But this was a project for learning, and not intended as a polished public release. That’s my excuse for sloppy designing.)

Let me know if you make it to the end!


Putting this together has helped me:

  • Become more comfortable with Unity’s layout.
  • Understand working in multiple levels (scenes), and how that affects assets.
  • Keep track of variables across multiple levels (i.e. global/local variables).
  • With scripting in C#, particularly with managing timing. But, more generally, my scripting is becoming much more flexible and cleaner, and I’m really understanding the benefit of making easy-to-follow code, always using variables (instead of explicit numbers, for example), and other things that come through daily practice.
  • Understand how to better use Coroutines and IEnumerators, or call functions across multiple game objects and scripts.
  • Learn how to use Mecanim for animations, and some of the differences between Mecanim and the legacy animation system.
  • Figure out how to move game objects, both AI-controlled and player-controlled, in particular through the use of tags.
  • Enabling and disable specific elements of game objects, as well as how to reference these elements (such as sprite rendering) and modify them — such as making objects temporarily invisible, re-coloring them, or applying force to them.
  • Using lighting.
  • With manipulating the interface (GUI — which I always say as “gooey”) — including managing text, making buttons appear/disappear, and using input to trigger scripts.
  • Learn how to publish content online (obviously).
  • Use Linecasting and Raytracing and Line rendering.
  • Understand how to set up a project, and use 2D or 3D mode.
  • Paying attention to the little things. Like many people say of the semi-colon in scripting, I’m finding that when I make mistakes it’s often little, silly things — like forgetting to enable a rigidbody or boxcollider. My work logs are littered with “Duh!” comments directed at myself after trying to debug why a script isn’t working — only to realize it wasn’t attached to the game object. Or trying to figure out why an object isn’t behaving properly before remembering I had temporarily changed the way the script works to test something else (and forgot to return it to normal).
  • With some side benefits, such as using Paint.Net to edit/clean pictures.

It surprised me how much I needed to learn in order to make something as simple as this puzzle game experiment. It also surprised me how often I became frustrated along the way and didn’t think I’d be able to get it done. But I kept pushing, even when I didn’t think it made sense to, and then the breakthroughs in understanding began.

I’m about 230 hours into using Unity now (when you add up all of the time spent on reading documentation, watching or following along with tutorials, and other, smaller projects I’ve worked on so far), but I feel like I’m at a point where I have a good foundation (the more you learn, of course, the more you realize how little you know.).

I’m getting better at reading the Unity documents and figuring out how to do new things. Previously, I felt pretty comfortable working in Unreal 3, but I can now say that I think I’m not only more comfortable in Unity, but I think what I can do in Unity far exceeds what I could do in Unreal 3.

What do you think?