Build Log story

Internship report: Unity forever

Editor’s note: Yan Wei, a former student of YJ’s, joined us for a 3.5-month internship , which happened to coincide with Singapore’s “circuit breaker” lockdown. Nevertheless, Yan Wei managed to make the most of his time with us by diving into a project developing curriculum and example games for Unity—something we know he’s been very passionate about since he was in school. At time of publication, he’s about to start his first year at NTU in Computer Science, where we’re sure he’ll be up to some really cool projects.

The Unity game engine is one of the most popular game engines today. It has been used to develop numerous blockbuster titles including Hearthstone, Fallout Shelter, Kerbal Space Program, and… Dream Daddy: A Dad Dating Simulator. Besides game development, Unity has also seen use in films, animation, engineering, and much, much more. With new features and updates being released aplenty, the possibilities with Unity are endless!

This article will talk about none of those things. Instead, this is about the three month journey of an intern at Tinkertanker who had no idea what he was in for.

I joined Tinkertanker in March 2020 with a friend, Zhi Yi, who I worked with closely throughout my internship. We weren’t completely new to the company, though. Indeed, our first experience with Tinkertanker was during a Unity course in secondary school, taught by the boss man himself, Mr Soon. I remember having a lot of fun during lesson time, so when I was given the opportunity to help update the Unity curriculum during my internship, I was elated! Surely, planning lessons should be just as fun as going through the lesson themselves, right?

Cartoon figure pointing beside the words “that’s where you’re wrong kiddo”

Heirloom

My first project took me on a detour, and involved creating a companion mobile app to a toy sewing machine, meant to be delivered as part of a kit for educational purposes.

10 out of 10 respondents replied with “What?” when asked if the above picture reminded them of toying, sewing or machining

10 out of 10 respondents replied with “What?” when asked if the above picture reminded them of toying, sewing or machining

Unfortunately, it was right around this time when Singapore went into its first “circuit breaker”. Work on the physical prototype halted, and app development followed suit. It wasn’t long before the project was ultimately scrapped. I was devastated at my two days worth of hard work going to waste, but there was no time to grieve. A new task beckoned me.

In memory of my sewing app

In memory of my sewing app

Unity

After recovering, I switched my attention back to what brought me here in the first place: Unity curriculum development.

Lesson planning is tough. Especially when one doesn’t even know what he’s supposed to be teaching. Surprisingly, Unity had quite the wealth of resources with regards to curriculum development. One PDF document I looked through even had a specific lesson-by-lesson structure all planned out, ready for any educator to pick up and implement in their classes. Unfortunately, in this day and age where the typical, immature student is plagued with a short attention span and very quick to jump to conclusions, I deemed it to be useless and closed it without a second thought.

On second thought, I reopened the PDF. Working with Zhi Yi, we referenced the previous edition of Tinkercademy’s Unity curriculum, and came up with a rough outline one might follow to achieve a decent level of understanding of Unity. It included many elements from the old curriculum, like tutorials for the Unity Editor interface, but with additions that we felt would provide a more well-rounded exposure to the game engine. This included dedicated lessons for other features such as lighting, sounds and animations.

After that, lesson design usually went along the lines of first creating a demo game that would serve as the final product of every lesson, something like a model solution. This was pretty fun, and I was given great freedom in what I could create. These games serve to demonstrate applications of the concepts and features taught during the lesson.

An example is this spaceship game, which made use of Unity’s very well-made Playground assets.

Leaked footage from Tinkercademy’s astronaut training programme

Leaked footage from Tinkercademy’s astronaut training programme

The goal for each lesson was for students to work towards a version of the lesson’s demo game with the trainers’ guidance.

At first, the approach I took to write lessons was heavily inspired by existing Unity tutorials, online or in print. After all, I had to start somewhere. However, most of these tutorials were completely guided, down to every last line of code. Usually, this was expected; students need to know every step when implementing anything in Unity, or else nothing would work. However, because our course was meant to be interactive between trainers and students, a pedagogy of one-way instructions wasn’t going to cut it. Thus, exercises for students were needed, where students worked on problems and came up with solutions on their own. They were, by far, the trickiest things to figure out.

In the first few lessons I made, I carefully tailored exercises to what I thought would be logical progressions towards the completion of the demo games. I took great pride in them and felt like an absolute genius during the entire process. However, feedback from my lessons shattered my delusions. Exercises which I thought were easy were actually quite difficult, and exercises which I thought were just a tad bit challenging turned out to be impossible. Clearly, some form of bias had set in where I was completely overestimating the teaching capabilities of my lessons and underestimating the effort needed for each exercise.

With my dignity battered and bruised, I pressed forth. I sprinkled in plenty of gifs to give students a better understanding of what each exercise expected from them.

This is educational, trust me

This is educational, trust me

I also made exercises in future lessons start off easier and gradually increase in difficulty as the lesson progressed. In an initial run of the updated lessons, students had much less trouble understanding the exercises and the lesson felt smoother.

Although the lessons aren’t part of strict academic course, being accurate about Unity’s (and the accompanying C# language’s) terminology and in-engine behaviour was crucial to minimise errors or ambiguities. Given that our lessons would be targeted for beginners, we were not in a place to make assumptions about their understanding of Unity and its inner workings. This forced me to revisit both known and neglected topics to build a fuller understanding of the engine.

Case in point: before writing my lessons, I had zero knowledge of light or NavMesh baking. Now, I know both of those things have absolutely nothing to do with ovens or bread.

Besides the basics, I also developed lessons on more advanced topics like composition and finite state machines. Personally, I felt it was important to cover at least some ground in these areas to show the potential of Unity game development, and to serve as a source of inspiration for students should they undertake game development on their own.

A finite state machine turret

A finite state machine turret

The end

I am thankful for the opportunities given to me during my time at Tinkertanker. It has been a wonderful journey full of challenges and surprises and I’ve learnt so much about what it means to be a good developer and teacher.

No, I am not overly fixated on guns and shooting things

No, I am not overly fixated on guns and shooting things