Something I’ve learned about myself, and seen play out time and again, is that when I pick up something I really enjoy learning, I just can’t slow down. I grab at the basics, learn the interface, and immediately want to run off and build my dream version of whatever that may be.

My recent foray into game development using the Unity engine is a fantastic example of that pattern. I got up to speed on Unity’s interface, learned a little C# (and how similar it is to Java, which I am pretty comfortable with after a few years developing in Salesforce’s Java-derived Apex language), and fired up Project Virtue. Project Virtue was (and still is, once I get more skill under my belt) my attempt to learn Unity development by recreating one of my favorite games of all time: Ultima Online.

Example of Ultima Online’s Classic interface

Run Before You Walk

One of the first commercially successful MMORPG’s, UO was a formative experience for younger Luke, informing my desire games that were open-world, sandbox experiences that either let the player live out a vibrant storyline or to create their own narrative. You could become a brave warrior, a cunning mage, a stealthy thief, a blacksmith, or an animal tamer. The game felt limitless, at the time, with its dynamic economy, player housing system, and large world map. I even had pages of written out plans of how I would leverage my character’s animal taming skills to become fabulously wealthy (some things never change).

However, “simple” is not a word I’d use for UO’s set of game mechanics, certainly not from the perspective of a brand new lone wolf developer attempting to rebuild it from the ground up. You had movement, combat, inventory, magic systems, skill systems, user interfaces, and more to handle. How do I update my character to show they’re wearing a robe? HOW DO I EVEN CODE A ROBE? Even though all of the game’s graphics can be pulled from the old client, I still had to figure out a way to do that on a Mac using tools built for Windows computers years ago (though this did give me a Python project to build, finally).

I will say, tackling such a many-headed beast my first time out of the gate did help me learn some interesting mechanics and techniques on the fly, especially around the rendering and layering of 2D sprites in isometric perspective (which is a lot harder than I had expected). However, I quickly fell in way over my head and found myself just staring at my crappy sandbox scene and feeling totally unsure of where to go next.

Walk Before You Run

The feeling of uncertainty and being lost at this point was a bit of a wake-up call. This is the point in learning projects that, if I’m not totally excited about what I’m learning or don’t have a clear idea of something I want to build with it (Python, I’m looking at you), the next shiny object tends to catch my eye.

Luckily, my recent experience with digging into advanced Salesforce development topics for my Platform Developer II certification came to the forefront of my mind. At that time, I had been working for over two and a half years as a Salesforce developer already and, while I felt confident in my skills, for the most part, knew I had jumped past certain foundational aspects of the platform that left gaps in my learning. I managed to buckle down and spend an intensive two months before my exam identifying those gaps and systematically filling them in through study and practice while simultaneously cramming for my exam and the huge amount of new content I had to learn. All this a full year (at least) before most developers are recommended to jump into this level of exam.

I failed the exam on the first try but passed a few days later while at Salesforce’s Dreamforce event in San Francisco. Man, that felt good.

That whole experience really drove home a lesson I needed to truly absorb:

Learning the fundamentals of anything you want to excel at truly gives you a strong base to do whatever you want.

– Me, just now

Yes, yes, I know. This is not news to anyone, and of course not even to myself, really. But the allure of reaching for the stars once you’ve learned to build a set of stairs (and not bothering to learn all that rocket science in between) can just be so great! That sparkling feeling of taking something brand new that you have learned how to do and start figuring out how you can use it to build something you’re dreaming of is just so seductive, usually so much so that it can cause you to keep your eye on that dream rather than on gaining what you need to achieve it.

Walk Before You Fly

All that said, my experience with Unity was already starting to feel oddly similar to other exciting new projects I had picked up in the past. I had gotten the bare basics down and immediately ran off to build a clone of a complex, in-depth MMORPG, assuming I could just fill in the gaps in my learning as I went. While this totally works for some people (and probably would work for me in the very long term), I realized: I need to learn to walk before I can fly.

Listen, I’m trying to go for a walk => run => fly metaphor here. I’m a developer, not a writer. Oh, crap, I’m a writer too, aren’t I?

Metaphors aside, since I realized that it was the path I needed to take, I’ve been looking forward to gaining this fundamental, foundational experience. There are so many talented developers and designers out there doing some pretty outstanding things with the Unity engine, and if I want to count myself among them, I have to have a solid structure on which to stand.

So this blog can expect plenty of tutorial results and examples as I go (and likely forever, as development, in general, is forever changing and expanding), and I’ll always endeavor to share the results of where I am at / what I’ve completed.

Let’s get walking!

Leave a Reply