3D Platformer GameDev Series – Weekly Blog #2: Player Movement, Jumping, and Camera Tracking

Alrighty, it’s Sunday! As I mentioned last week, at the end of every week, I shall update everyone on my progress in the 3D Platformer Udemy course I am taking. If you have not checked out my opening blog post for this GameDev series, I do recommend having a read there as a preface before carrying on here.

So, am I enjoying this course so far? Absolutely! I must say, when it comes to understanding the course material, my decision to take a slow and measured approach to learning is really helpful, particularly in my retaining that knowledge. To prove how effective my approach has been, I will demonstrate today how basic player movement, jumping, and camera tracking can be achieved without referring to any of the course material.

To begin making a 3D platformer in Unity, the first step is to setup the game environment or scene. In Unity, the default 3D game scene contains a basic camera and a simple light source. The first thing to include in the scene is… well, a platform! For this, a simple planar surface is added to the scene – and just so it resembles the ground a bit more, a green material is applied to it. Next, a player model is required. Here, a 3D model of a robot is used (this was an asset provided in the course):

BasicGameEnvironment

After the game scene is set up, basic (planar) player movement and jumping can be achieved by the following C# script (Note: the coding in the yellow text boxes allow the player to “jump” while the rest of the code is responsible for lateral movement using the “WASD” keys, arrow keys, and/or game controller):

2. BasicPlayerMovement (with jumping)

I won’t get into what each variable, function, and parameter does in each line of coding (which in my opinion is all very interesting), but I can assure you that I can explain all of it as a result of this course. You see, the course instructor, James Doyle, has done an amazing job in explaining all of the concepts clearly and concisely – even using examples to illustrate his point at times. Essentially, what I can show is that the following result is produced when the above script is attached to the player model:

basicplayermovementandjump

So far so good. However, we run into an issue where the player can walk off of the screen and/or disappear out of the camera’s view. How do we get around this? What is crucial in any 3D platformer? Camera tracking. For this, Unity has in its Package Manager toolkit an asset called “Cinemachine“. After installation, a “FreeLook” Camera object is conveniently added to the game scene. Once added, it replaces the default main camera and a plethora of camera settings are then available:

UnityCinemachine

First (see blue box in the picture above), the “Follow” parameter is set to reference the player mesh and the “Look At” parameter to reference the mesh of the character’s head. After, the following script (see coding in red boxes below) is necessary for the camera tracking to work whenever the player inputs commands to move the character around the environment (Note: The third red box down replaces an earlier line of coding which now allows the player to move in the appropriate direction regardless of where the camera is positioned around the player):

4. BasicPlayerMovement (camera tracking)

Again, I won’t go into how the coding works, but I can show that the script above produces the following result:

cameratrackingplayermovement

Notice how the camera is now following the player (the robot) around the environment and when the mouse is moved around, the camera is essentially looking at the robot’s head. Indeed, I have found that Cinemachine is a powerful tool in Unity.

To conclude today’s blog post, whether you are a game developer reading this or not, I hope that you can appreciate the work and process behind making a 3D platformer. And along the way, I hope this will inspire you to start or continue on a project of your own. I look forward to next week, where I will demonstrate here how to implement player rotation and animate our player robot to give him some form of (apparent) life! Stay tuned!

– Taklon

3D Platformer GameDev Series – Weekly Blog #1: Introduction

Welcome to the start of my new GameDev series for my blog! This series will focus exclusively on the genre of 3D platform games which are also referred to as ‘3D platformers’ and will be herein referred to as such. Unfortunately, games that contain ‘platforming’ mechanics but are not classified as 3D platformers will be excluded from this blog post. For example, these games primarily fall under the genres of action and/or adventure albeit contain secondary 3D platforming mechanics as well (sorry Zelda and Goemon fans!). Simply put, “3D platformer” is defined as a subgenre in such games where platforming is not the main focus or element of the game.

Further along in this opening blog post, we will deepen our understanding of what defines a 3D platformer technically. After, we will take a stroll down memory lane and name some of the best and most popular 3D platformers, which may arguably be the golden era when they were first being developed and released. And in subsequent weekly blog posts, I will share my journey of making my own simple 3D platformer beginning with my progress in another Udemy course I have recently enrolled in: “Learn to make a 3D Platformer Game with Unity“.

So technically-speaking, what makes a true 3D platformer? As a gamer, the answer may not be as clear as one would expect. As a game developer, the answer is simple. As the name suggests, in a 3D platformer, the player needs to be able to control the ability to jump and move while jumping in an exclusively 3D environment. This means that 3D games whereby jumping is automated (i.e. – the player cannot control the movement of the character whilst in the air) are not true 3D platformers. Rather, these games may contain ‘platforming’ mechanics but fall outside the genre of them being classified as 3D platformers. The same goes with ‘isometric’ games (2D graphics with 3D gameplay) and 2.5D (3D graphics viewed on a 2D plane); these are not true 3D platformers by definition.

AlphaWavesFirst3DPlatformer
Alpha Waves (1990) – First 3D Platformer developed by Infogrames. Primitive 3D graphics. Click here to check out its gameplay!

So what are some of the best and most popular 3D platformers? Personally, I think some of the best ones were released on the Playstation 1 and N64. Ah yes.. the mid 90s to late 90s. Super Mario 64, Crash Bandicoot, and Spyro the Dragon were no doubt many fan favourites. What are some of your favourites, personally?

SuperMario64
Super Mario 64 (1996)
CrashBandicoot
Crash Bandicoot (1996)
SpyroTheDragon
Spyro The Dragon (1998)

 

 

 

 

For a comprehensive list of what was claimed to contain every 3D platformer made from 1990 up to 2018, be sure to check out out Gameranx’s article on the subject matter! Below is also a graph from the article which seems to suggest there was nearly a decade (1998 to 2006) when 3D platformers were especially popular.

3Dplatformersgraph (1990 to 2018)_gameranx
A chart showing the number of 3D platformer titles released each year from 1990 to 2018. Source: Every 3D Platformer Ever Made, Gameranx (Filippidis, 2018).

Despite less mainstream 3D platformers being released nowadays, you may be wondering why I still want to learn how to make a 3D platformer. First and foremost, I just think they’re a lot of fun to play. Not to mention, they seem to be one of the only genres of games I can tolerate watching an entire speedrun of – and in absolute awe at that. But above all, I feel that 3D platformer as a subgenre is what defines and brings many action-adventure games to life that we have all come to love.

Be sure to drop a comment and let me know what some of your favourite (and least favourite) 3D platformers are. And stay tuned for the next blog post in this weekly GameDev series, every Sunday!

– Taklon

So Taklon, what’s in store ‘for 2020’?

On New Year’s Day, I revealed that I had been struggling with dedicating time and finding motivation to improve my skills involving graphics, animation, and game design – all of which speaks to the essence of my blog.

Needless to say, the first few months of 2020 leading up to today have been stressful, uncertain, and rather grim for everyone. As I am writing this blog post, the Covid-19 pandemic continues to weigh down on every single one of us and is expected to continue to do so for months ahead at the very least.

From early to mid-February (just before the Covid-19 outbreak had occurred here in Canada), I was fortunate to had the opportunity to travel to Japan for the first time – my first solo trip abroad. Memories of the time I spent there, are thus, still fresh in my mind. And if I had to choose, highlights of my trip involved visiting awe-inspiring places such as the Studio Ghibli Museum and Team Borderless Digital Art Museum. But above all, I am finding that it was moments of complete solitude in Japan that I enjoyed and appreciated the most as it really gave me a chance to look back and to look forward ahead on what I wanted and continue to want to do in life.

Looking back, last April, I began working with Blender 2.80. At that time, I also took a dive right into the Unity game engine along with some coding in C#. With the help of some YouTube tutorials, I worked on a game. Although I made some progress in the end, I regret to say that I will be putting this project aside for good. It was a valuable experience nonetheless:

taklongameabandon

Flash forward one whole year later and I am realizing that following tutorials on YouTube and essentially replicating more-or-less what is shown isn’t exactly how I want to approach the learning process moving forward, especially in an area such as game development. So, I figured since I had a successful experience with the previous Udemy course I had taken, I decided to enroll in another course on Udemy: Learn to Make a 3D Platformer Game with Unity:

udemy3Dplatformercourseimage

Unlike the previous Udemy course I had taken, the instructor in this new course I am taking does not provide tests or encourage his students to test themselves to see if they understood the material after they complete a course section. Thus, my approach for completing this course is very simple. That is, I will go through each section of the course as slowly and as many times as necessary. The process to my approach is twofold. First, I will move on to the next course section if and only if I can produce the material in the current section on my own. Secondly, I will re-visit older sections (not necessarily just the previous section) as I reach further into the course.

My endgoal objective is to be able to take everything that I learned in the entire course and make a 3D platformer game on my own using original game assets I have made myself in Blender (instead of using the ones provided in the course) – in other words, this means making a simple, original, and complete 3D platformer game without referring to any course notes or videos or tutorials online (i.e.- YouTube).

Last but not least, I will be committing to weekly blogs on my progress for this course! So do stay tuned for my first blog post on this ‘GameDev’ series, where I will begin by sharing my thoughts on 3D platformer games in general. 🙂

– Taklon