Before I even start writing I’m worried that this will turn into a sarcastic rant, so I apologise in advance. I’ve just completed the second semester of my MSc, which included one really great module on technology enhanced learning environments, and one really disappointing module on interactive 3D programming. I’ll tell you all about the learning environments in another post; for now I want to focus on what went wrong with the latter.
I knew this module would be difficult from the start. I’d be learning C# — a totally new programming language to me — and I’d be required to do some relatively advanced maths that went way beyond the C grade I’d achieved in my GCSEs 12 years ago. Here I was, a programming beginner only 2 modules deep into an MSc, expected to learn all about the graphical rendering pipeline, physics and a new programming language at the same pace as third year computer science students. What could possibly go wrong?
Have you heard of the game engine Mogre? Ogre3D? No? Neither had I. Most likely because it hasn’t been updated since about 2008. 10 (TEN) years ago. That’s millennia in computing terms. Can you remember the computer you had in 2008? If you were loaded, your GPU might have clocked in at a whopping 602Mhz with 1GB memory. But then, that would have been more than enough to run Fallout 3. Naturally, this was the game engine that the class of 2018 would be using to build 3D games.
‘But Steve!’ I hear you cry, ‘Why weren’t you just working in Unity like virtually everyone else in the industry?’ And to you I say what a fool you are! The games industry doesn’t want to see people who can work with Unity. They want people who have more background knowledge, who might know more about the mechanics of it all. Sure, Unity makes it easier and quicker, but a graduate who knows how to work in a more difficult, time consuming way would just walk into a job.
So our aim was to build a 3D game with some robot dude who rolls around collecting gems shooting other robots. Pretty simple really. Sure, it was a slight step up from my last project. I mean, here’s the class diagram for my previous game (in fact, the only game I’ve ever made)…
And this was the ‘suggested’ class diagram for our 3D game…
Of course a 3D game would be more complex. I didn’t doubt that. But who doesn’t love a challenge…on top of the challenge of learning a new programming language…and high level maths…in an outdated games engine…?
But it’s OK, because we had all the tuition we could possibly need. In the form of videos. That were last updated 4 years ago.
Anyway; I got to work trying to make sense of all of this, and I think it was about a week before the deadline when something finally clicked. Sort of. I was just about starting to understand C#, and if I’m honest, I quite like it.
The properties feature is great, and it was quite easy to transfer over from Java. That’s about as far in as I got to be honest.
What did I learn? Inheritance
In some cases, we were using classes that were 4 layers of inheritance deep. I’d used inheritance and subclasses before, but this was taking it to the next level so it was really important to get my head around it. At first it seemed completely unnecessary, but as the classes grew it started to make sense.
I’d describe inheritance as being a bit like putting things into categories to save time. They work a bit like taxonomy; linking species and subspecies together. a house cat and a lion and a panther are all cats (Felidae to be exact), but they’re all different. If you were making classes for cats, you could create an abstract class of ‘Cat’ first. It’ll say that it has four legs and whiskers and a tail, it’s a carnivore, it has fur and it’s cute as heck. But it’s vague; there’s no such thing as just a ‘Cat’. So you use that to create different kinds of cats. They all have fur and four legs, but this one weighs the best part of a tonne while this one sits on your lap. This one is black, this one is golden brown with a big mane. But then think about all the types of house cat you have; this one is tortoiseshell, this one is fluffy, this one’s super friendly and this one’s just a dick. Now you’ve got a second level of inheritance; a subclass of ‘HouseCat’ which is a subclass of ‘Cat’. In fact, that first description of ‘Cat’ could be used for dogs too, so maybe we could move some of those features into a ‘Mammal’ (or whatever the lowest common denominator is; Carnivora I guess) class and create a new ‘Dog’ subclass from that.
Essentially, you take all of the rules that you can apply to everything to create a class, then create more detailed subclasses that pick up all of the rules from the first class. This saves you having to re-write those same rules over and over again; useful when you’re dealing with a growing number of classes.
But how did the game go?
So I can’t say I learned nothing, but there were plenty of times I felt like I’d been short changed with the teaching on this module. The end result was a confused mess of classes that sort-of worked. It wasn’t really a playable game, but the vague idea of one was there at least.
I was also disappointed that there was absolutely no visual design work in this module. We were given 3D models and told to make them work. I guess the focus was on the mechanics. This course really is about the science and not the art, but it does leave me feeling like the skills I actually do have aren’t relevant here. That’s a whole different story though.
I don’t feel like I got everything out of this that I was looking for. My plan from here is to go ahead and learn Unity, for free, you know like everyone else does? There’s a fine line between digging into deeper knowledge of a subject, and just straight up wasting time.