An Exploration Into The Learning Process of Unity for 3D Game Development

Throughout the last few months I’ve been learning the ropes of using Unity as a Game Development Environment. My main focuses have been on using it for 2D game development, since the prospect of using it for 3D was frightening to say the least. With 2D games, dealing with animations or with level design, and using script that directly interacts with the GameObjects in the scene has been fairly simple, especially since you only have to worry about 2 dimensions.

Additionally, one of the bigger roadblocks between me and accessing the world of 3-Dimensional game development has been things such as textures and models. With 2D, it’s easy enough to use a tileset and the tile palette features in Unity to create the worlds in which our player interacts, but with 3D it’s a completely different ball game. With 2D, it’s also easy enough to get assets from all kinds of other games through spritesheets, as seen in my first attempt at making a game from scratch, Dunn-geon:

For this game, I used very basic tiles that were drawn using Paint.NET, and for the character I used a spritesheet of Setzer from Final Fantasy 6 (obtained from The Spriters Resource) and was able to easily adapt it to make movements with the character. Animation trees are as simple as “is the x position/y position of the character moving? is it positive or negative? If so, run this animation” and the animation is as simple as picking which frame to animate and ordering it correctly.

Meanwhile, with 3D games, animating characters is a terrifying concept if you have no experience in the field. Whether it’s designing a model, creating bones for the model, and rigging the bones to the model, and that’s before even creating the animations for it or even beginning to look at texturing the model so it’s not just a plain shade of grey.

And with 3D games, if you’re wanting to set up the scripting behind animations, it’s not just “is the character moving along the x or y co-ordinates?” because not only have you now got the Z axis to worry about, you’ve also got the additional level of rotation that can occur, as well as having to calculate movement vectors and all that.

There’s so much more as well, especially when you take Cameras and Camera Control into account, as well as the lighting of your scene, not to mention textures! “What the hell is an Albedo? What’s a Specular map? Why am I diffusing it, is it going to explode?!?”

It all just seemed incredibly daunting, and thinking about the additional things that I have zero experience with that I would need to learn if I wanted to work on 3D games just made me want to hurl up my lunch, because frankly that’s a lot of things that I need to deal with if I want to make a game in 3D.

So, I got to work, and this is what I did:

This is the result of spending a few days learning about the basics. I decided to watch a couple of tutorials on the basics of using 3D Models, their rigs, and their animations. Up until this point, the idea of using Assets from the Asset Store, whether free or paid for, was not what I was wanting to do. I wanted to work on things from scratch, and wanted everything to be my own, but ultimately that mindset does nothing but hold me back.

It was when moving into 3D development that I decided to embrace the use of assets, and swiftly got my hands on a few that were recommended from tutorials I was following from the UnityLearn page, including a basic animation/motion capture package that can be applied to a lot of 3D models. I also grabbed some of Unity’s official assets, such as “Space Robot Kyle” as well as some basic rocky textures, some of which you can see on the staircase in the above video.

Being able to use these basic assets has allowed me worry less about the more daunting ideas behind developing in 3D, and spend more time learning about a lot of the core mechanics behind 3D.

I was able to learn more than I already knew about the Animator Controller component including learning about the various parameters you can use with Animator Controllers, including making it easy enough to set and reset triggers to ensure animations don’t loop forever. I was also able to learn about how Blend Trees work, and how Unity is able to blend similar animations together, including weighting them based on variables, such as a running forward animation being blended with a running diagonally, with one being more of the key focus than the other based on which direction the user is running:

I was also able to learn about how a NavMeshAgent works, enabling me to give an NPC very basic AI capabilities, such as tracking the player character and following them, or setting a specific path for them to follow, to simulate them moving around a level. In the video above, you can see it in action, as I have set the AI to travel to different points on the map, simulating them searching for the player character, or doing routine rounds on an area they are supposed to work as guards for, and if the player enters their search radius, they follow the character relentlessly until they either capture the player or they lose track of them and the player manages to escape.

Before I took the plunge into learning more about 3D game design, I was frightened of all of the additional things I would have to worry about, all of the extra things that I would have to learn how to do, and most of all having to learn how to create 3D models from scratch.

Once I started working on the game using various assets to help accelerate the learning process, I started to learn aspects of 3D development that are truly important, and definitely feel a lot more confident in learning more about it and creating a proper game using 3D instead of chaining myself to the world of 2D and chaining myself to this idea that I don’t want to and absolutely cannot use assets because I want to make everything myself from scratch. If you approach learning about Game Development with that style of mindset, it makes the learning process much harder, much longer, and much more off-putting.

To be perfectly honest as well, that mindset is why it’s been such a long period between the previous post and this one. Part of me was put off with working on developing my game because it looked awful. The assets that I created were basic, shoddy, and rushed because when it comes to designing assets, whether it’s a character, a tileset, icons for items etc. I’m just not at a decent level just yet. And using terrible self-made assets just makes the game look super shoddy. Additionally, I’d spend so much more time designing assets that I was ultimately unhappy with that I’d get burned out quickly with doing actual development, and it shows in how much time I’ve spent as of late working on Dunn-geon.

Deciding to use other peoples assets compared to my own is night and day, and honestly it’s the best decision I’ve ever made. It also means that I can spend less time worrying about the look of my game, and more time worrying about getting on with it and learning to do what I want to do with the game.

Unshackling myself from the world of 2D has also given me a whole new dimension of things to work on (if you’ll excuse the pun) and has honestly put me back on the right path towards being able to make something I’m proud of. And if you’re like me and frightened of the prospect of jumping into learning how to develop in 3D and don’t know where to start, then the UnityLearn page is probably the best place to start. There’s also a lot of great YouTube channels out there that show you things from the basics all the way up to advanced modelling and rigging techniques, so there’s always something to help you with the next step.