top of page

Unit 9 Project Toy Trip Demo

The goal for unit 9 was to conceptualise and build a fully functional game demo to the standard of quality found in the professional games industry. We had to create an imaginative concept for a video game and realize that in a functional game demo. The game idea we went with was a concept we had been developing for a number of months beforehand and thought would be a perfect fit for this assignment.

In order to develop a game to completion, it was important to go through the development process. First we had to think of a concept. Then we had to go through the pre-production phase and plan out what we wanted our final demo to be and what we could do in the time frame allotted to us. After that, we had to produce the game which required us to take on different roles during the production process so that we could manage our time efficiently. To finalise the game, it has to go through a post production phase where the game is tested by quality testers to iron out any bugs and to tweak the gameplay so that it is more fun.

Idea and Concept

Our concept for this assignment was to create a simple racing game that was easy to learn but hard to master. Unlike other racing games that has a heavy focus on items, our racing game focuses on using predetermined special parts that change the abilities of the car. Our game took inspiration from the racing series Choro Q, particularly the game “Road Trip Adventure” which was a very casual racing game with RPG open world elements. We didn’t want our game to be another Mario Kart clone. “Road Trip Adventure” took a unique approach to the racing formula. You could customize the vehicles before each race with special parts that changed how the abilities of the car. For example, you could add jets to the car to give it a turbo boost or you could add a glider so that it could fly etc. That being said the game had several flaws such as strange physics, vast open spaces in the open world and an exploitable progression system. For our final game we want the game to have an open world but for this demo we decided to only create a few levels for the arcade mode.

Here is short video of of the game which was the main inspiration.

For our final game we want the game to have an open world but for this demo we decided to only create a few levels for the arcade mode.

We want the art style of the game to take inspiration from Nintendo games like Mario and Zelda. We want the aesthetic to look rich, vibrant and colourful to invoke a child like feeling of wonder and excitement. We want it to invoke the style of 3d animated films and cartoons such as Pixar or Disney.

Core Concept

Our game is an Arcade Style Racing Game where you can customise the car with a variety of special parts that give the car different abilities such as boosting, gliding, hovering or scubaring. You can explore a large open world environment.

We want to implement car customisation as a key part of the gameplay and progression upgrade system; engines, wheels etc allowing you to compete with faster cars and unlock new races. But we also want to have a “super part” mechanic where you can use a limited amount of super parts at any 1 time to allow your car to go on new routes and have new abilities such as jet,engines,hovercraft glider etc.

Also we want the cars to have a cartoony shape to them and to all have the same wheelbase so that you can change the body but have no effect on handling so if you want to play as a silly London bus with jet engines that can compete with f1 cars, you can.

We want to have multiple game modes and split screen local multiplayer with the main game split into 2 main modes Story Mode which will be the main Single Player and Arcade Mode with single and Multiplayer modes as well as special sub game modes. With the main Arcade Mode being the first part we get working and made for the demo.

We want our tracks and environments to be creative and varied with multiple routes and different weather and road types. Racetracks will be based on a multitude of different inspirations including real world racetracks and locations such as the streets of Venice or Lemans to more fantastical locations such as a low gravity space station or a child’s bedroom.

Our goal for the Unit was to create a demo that gave you a taste of what we want to accomplish for this video game as we continue developing this into the future.

Evaluation of Prototype

The Tools

We used the Unity game engine to build the game and used the store asset “realistic car controller“ (RCC) for the car physics. For our art assets, we used Blender to create the 3D models and Photoshop CC 2018 and Substance Painter to create the textures. Finally we used Notepad++ as our main programing tool to code the game.

Roles

We both decided to work on specific areas of the project to utilise our strengths.The main areas that peter worked on were 3D modeling the environments and the vehicle. He also created the textures for said models. Peter also worked on tweaking RCC (Realistic Car Controller) physics to best suit the game.

The main areas that Sammy worked on in this project are the Menus, the User Interface, the Heads- Up Display and the general scripting for the game’s game mechanics and Artificial Intelligence.

End Goal

The plan for the end of this assignment is to create a functional car that can race around a course with physics roughly representative of what we wish to achieve with the final product. We also want to create one - two race tracks that the car can race around. We also want this demo to have working local split screen gameplay.

We planned to do this by designing a simple race track that the car would race around to test the physics of the car and all the elements of gameplay required for a functional racing game. It would be coded in C#.

Peters Development

I started off by planning what to include for this demo. I made the plan to create a simple figure 8 racetrack and started work on it before Half term. With a bit of help from our former tutor Craig we created a simple checkpoint system. We used the standard assets car from Unity to test the checkpoint system and custom physics materials to simulate grass, road, sand etc. The default car scripts didn't work with physics materials so we had to change some of the code in the scripts to get this to work with the default car controller. Then the last week before half term I designed a cartoon car based off the group c category of cars of Motor sport during the 80’s and 90’s in Photoshop. This is the car that would be used in the demo. I used a Mazda 787B race car as inspiration for my design whilst following the art style inspired by Choro Q. I received feedback from my fellow classmates and tutors to improve the design to a point I was happy with.

Then Over the half term I really wanted to get this car from drawing to reality so begun modelling it on and off and with some help from Sammy the model was completed over a few weeks. I am extremely happy with the results even if it still requires a bit more work such as better wheels and rear lights so that emissive textures can be used on them.

This was also 1 of my first ever models using blender first after the Unit 70 Wow project. And was surprised how fast I learned it after struggling for so long with 3DS Max.

I also used Substance Painter for the first time to create materials that could be imported into Unity. It was a bit rushed as I wanted to get other things done but the texture I made for the car in Substance/Photoshop looked good enough to be used as a rough temporary texture.

Afterwards I designed a new track which I called “La Grand Endurance”, a track taking iconic and fun parts from famous real world race tracks new and old and combined them with completely original sections. I felt like it would be a fun and visually interesting race track. While I planned on building this as the track for the final Demo, it ended up being too ambitious to complete on time and was subsequently shelved for a future date.

I then began to work on getting the car to work with RCC. One problem I still need to fix is that the car model is sideways in Unity which makes the car drive sideways in RCC. I found a solution to this problem for the Game Jam and demo by placing the car on an empty gameobject facing the correct direction. It’s not ideal but it does the job. It was very easy to set up the car with RCC, it just took a lot of trial and error to get the handling to a point I was happy with. I was tweaking the handling all the way to the end of the project. After this we got some help from our tutor Craig on getting split screen working. To get RCC working with player two, we cloned the RCC car controller script and changed its inputs. For more details on this, see Sammy’s section.

During the Game Jam, I worked on building and improving the second version of the test track for the game. I made quick textures for the track in Substance Painter and improved the lighting in Unity. I also made temporary textures for the player two car. I also worked on HUD icons, menu icons and backgrounds in Photoshop which came out well. We didn't have time to get the menus working for the Game Jam in the end so these assets were not used. After the Game Jam I completely remodelled and re-textured the track which I renamed “TestTrack 3” for the demo. I spent the rest of the project making concepts and working on models, textures and lighting for “TestTrack 3” and polishing the project.

Sammy's Development

To start the project off, Peter and I decided to make a racing game. We created concepts about the general idea of the game, what modes the game would have, car customisation, the game menus and user interface the players would see during gameplay. Peter started the project before I did and was already working on the 3D model of the car that would be used in the project. I assisted Peter with the 3D modelling process including teaching him how to use blender and giving him feedback on the model so that it could be improved.

We knew that trying to make all of this would be too ambitious for this project so we decided to only create a demonstration of the arcade. The arcade mode is where players go to play through the tracks either on their own against a ghost or against other players in local or global multiplayer. For the purposes of this assignment we decided to create the local multiplayer portion of this. This was a more attainable goal for this deadline.

One of the aspects of this game we want to implement in the final product is special parts, where the player can choose from a number of different parts that change the properties of how the car controls such as adding a boost feature, gliding and boating. This would allow them to travel through different paths in the track. I chose not to implement this feature for the assignment as I believe that with my current skill level that it is currently above my skill level in coding and would have taken too much time to implement for the given deadline of this assignment. I instead decided to focus on creating a solid base system that could be used for the rest of the game.

The first thing that I started working on was the implementing split screen so that two players could play at the same time locally. I had some help from Craig in accomplishing this task. To implement split screen into the project, I first created two cameras. Once I had created both cameras, I needed to go into the properties of both cameras and change the width of the view-port rectangle of the camera to 0.5 and leave the height at 1 (For vertical split screen). If I wanted to implement horizontal split screen, I would change the height to 0.5 and keep the width at 1. Above the width and height of the camera is the cameras XY coordinates in the view-port rectangle. This determines where in the canvas the camera would display. For player one, the x coordinate was set to 0 so that it starts at the very left corner of the canvas. For player two, the x coordinate was set to 0.5 to denote that the camera view starts at the centre of the screen.

After I had built the split screen, I started working on the UI. The first element of the user interface that I worked on was the lap timer. As the functionality of the lap timer is not reliant on any other gameplay element to work, I thought that was a good place to start. This also ensures that we can time the car on from an early point in development which is useful in deciding whether a race track is too short or too long and gives us a method to determine which car handling setup is the best to use.

From there, I worked on the checkpoint system. A simple version of the checkpoint system was created by Peter with help from Craig. I further developed the system so that it works with multiple players. The checkpoint system requires two scripts. The checkpoints script and the laps script. The checkpoint script detects whether the player car is colliding with the checkpoint boundary and deactivates the triggered checkpoint. This then goes to the next checkpoint in the checkpoint array in the laps script. Once the player has gone through all the checkpoints in the array, the array starts again from the beginning and then adds 1 to the lap counter. This script is also used to tell the game how many laps are required to complete the track. I also created a single player UI canvas and a multiplayer UI canvas. I had to duplicate these scripts along with a RCC script and then modify them so that they would work with the second player.

RCC had a script that increased and decreased the speedometer to tell the player how fast they are going but it is not very accurate right now. I was unable to create a script in time to tell the player what position they are currently at in the race, so right now all it says is that they are in 1st place (for player one) and 2nd place (for player two).

After creating the UI, I designed and built the game menus to navigate between all the tracks made by Peter. There is the “main menu”, the “track select” and a screen that says that there is nothing here for where the menu navigates to something that currently does not exist. The menus that are we are using for the project right now are not what we originally planned to implement. The current menus are very simple and are designed for function rather than form. We originally planned to have an animated background, custom buttons and images and a proper track select with an array. Whilst we have designed concepts for what we want the menus to look like, we were not able to implement these menus into the game for the deadline.

The last thing I implemented into the project is a return button that when pressed returns the player back to the main menu. This is so that they can navigate back from the track they have selected.

I decided to use notepad++ instead of Playmaker to keep the coding consistent from script to script. I was concerned that Unity would have problems reading between Playmaker scripts and ‘C# scripts as I don’t know how Playmaker works behind the scenes.

I also attempted to add AI into the first track we created. RCC comes with its own AI script that I could use to create AI racing opponents. I found the experience trying to make the AI follow the race track both aggravating and amusing. The AI would not follow the path that I laid out properly and it produced amusing results. I later found out that this was because I had not setup the NavMesh on the race track mesh and the AI did not know where they could go and was subsequently getting confused. With a lot of tweaking, I was able to get the AI to follow the track with relative consistency. However Peter and I came across a problem. As Peter was tweaking the handling of the car at the same time, I found that the AI no longer followed the track when the different handling was applied to them. So we decided to set aside implementing the AI later until we have settled on the handling setup so that the handling doesn't interfere with the AI path-finding.

Summary and conclusion

At the end of this project, we were unable to implement all of the functions and features we wanted for this demo such as the best time and the player’s position. This project has been a challenging learning experience as Peter had just started to learn how to use Blender and Sammy had only a basic knowledge of C# programming. Despite the fact that both of us lack experience in these areas of games development, we surprised ourselves with how much we accomplished with this project considering the skills we started with. The project was also a test of our organisation and planning skills as we had to set goals for the development of this project and had to scale back the scope of this project so that it was doable in the time frame allotted by this assignment.

During the production of this game, we encountered many problems that hindered the progress of the game. We both lacked skill in the use of certain programs required to make the assets in the game and a lack of skill programming. As the project was so big and took so much time and effort to build, we both became fatigued. As a result, we sometimes suffered from a lack of motivation to complete assets and script code as we both got burnt out. During these times we lacked focus on the project and weren’t very productive and got frustrated when we couldn’t find a solution to the problems we were facing at the time. Peter suffered from creative block and Sammy got obsessed in trying to complete one of the functions of the demo despite it being above her skill level at the time.

We got a bit too overambitious at times and added on more goals to the Demo than we originally planned for kept moving the goalposts for our end goal for this project. Only a few of these plans were accomplished. Moving the goalposts is a problem in game development as it can kill your motivation to complete the project and can get you stuck in a cycle of perfection where the game never gets finished.

We managed to complete the majority of what we had originally planned for the Demo and got the demo to a playable state despite the fact that we were limited by our lack of experience. We had to improvise and use placeholders to get the demo functional on time.

We managed to build a solid foundation of game mechanics for a demo working in a span of a few hours during the Game Jam including a Heads Up Display and a win state and a loss state. (The win state and loss state would however later be removed as they didn’t work correctly).

Peter had success at designing and modeling a decently well optimised and detailed car model for the game, while at the same time learning a different 3D Modeling package (Blender) to what Peter has been used to using for years. (AutoDesk 3DS Max)

Overall, we accomplished a lot with this project even if we were not able to fully implement everything we wanted to for the assignment and it highlights that we both still have much to learn and improve on. We intend to continue this project into the future and we are confident we can make a product that we believe will be fun to create and fun to play.


Featured Posts
Check back soon
Once posts are published, you’ll see them here.
Recent Posts
Search By Tags
No tags yet.
Follow Us
  • Facebook Classic
  • Twitter Classic
  • Google Classic

Thanks! Message sent.

bottom of page