Diving Into the Deep End

I’ve been programming for about two years, seriously for one, and have really found a home learning and working with Unity, C#, and all the packages, SDKs, methods, and variables contained within, notably through GameDevHQ.

Microsoft Excel and my attempts at automating/avoiding any and all manual calculations were my first exposure to self-taught programming, or as close to programming I was getting at the time. With this knowledge, I believed the only way to make good use of what I knew was by finishing that highly valued, cost inefficient, and traditional four-year bachelor’s degree… right? Well after obtaining that degree in a dissimilar field, I became more interested in software development, and simultaneously sought out more and more resources to satisfy that interest. I ultimately stumbled upon a Humble Bundle featuring GameDevHQ where I subscribed for a full membership a few months later primarily due to the fact that they offered a structured learning track which I urgently needed.

In working through the courses, I was able to implement and expand on projects showcasing my own flair whether it be with a general beginner’s 2D space shooter, but Spaceballs themed; staging a 3D sci-fi control room, except now it’s a Roman temple; or developing a simple insurance claims app which has grown into an AWS-heavy personal testing tracker. Each project and implementation has brought its own challenges, “Eureka!” moments, and expanded understanding of object oriented programming.

Most recently, I’ve dived into expanding that understanding even further by joining GameDevHQ’s intensive training program with the goal of honing my skills for a career in software development. This is an eight-week program which started on February 15th where tasks for a pre-rendered tower defense-style project are unlocked weekly, and then we’re charged with “writing the code, building the mechanics, and fully creating” the project.

The tasks outlined for this first week called for creating an AI pathfinding system so that enemies would move through the level towards a target as well as a spawn manager which utilizes a wave system and object pooling. Lo and behold, the first roadblock I came across was the very first task I attempted to scratch off my Trello board (my confidence really took a hit here). All I needed to do was bake a NavMesh floor. The level was set up, the NavMesh path was already outlined… you know, simple! So I get it baked, great; set up the AI to move via NavMeshAgent.SetDestination(), good; the AI goes around the first couple corners beautifully, awesome; and then the AI takes a shortcut to skip about a quarter of the level, crap. A couple hours debugging and a mildly long break later, it turns out the NavMesh path had incorrectly baked because of other objects being present in the scene. This caused a secondary path/shortcut to form so an easy fix simply involved disabling other objects in the scene besides the NavMesh, rebaking the path, and then re-enabling the other game objects. Sigh.

After this debacle, I focused on creating an abstract enemy class for each enemy type to inherit which would also utilize an interface for health, armor, and damage. I was able to set up an initial damage method where as armor integrity decreases, the damage to health increases relative to the armor’s remaining strength and initial damage amount. From there, I set up my spawn manger using a monosingleton and tried to modularize its methods as much as possible. A nice trick I figured out was being able to dynamically change a cached WaitForSeconds through the inspector by using a return type function and float variable. I’m currently unaware if a WaitForSeconds variable can be shown in a customized Unity editor, but the combination of return type function and float seems to work just as well and is able to be updated each time the SpawnRoutine() is called. This will hopefully be useful for shaking up the enemy spawns later in the game. Finally, I was able to recycle and respawn spawned enemies once they reached their target destination and were disabled while also maintaining a consistent time between spawns. These enemies will constantly respawn so long as the amount of enemies destroyed doesn’t equal the amount of enemies allowed to spawn at that particular time.

Even though we’re only three days in, I’ve luckily avoided any other major hurdles or headaches while completing nearly all the assigned tasks, and am eagerly awaiting what’s to come, what opportunities this may open up, and what I’ll achieve by taking a leap and diving into this program.

It’s my goal to regularly provide updates on my experience with Unity throughout this program and beyond so thank you for reading, and I hope you’re looking forward to it as I know I am.

Cheers

I’m an emergent software developer with a longtime love of games and a growing understanding of how to actually build them.