Research
What is level design?
Level design a phase of video game development, where stages, maps and missions of the game are designed. The main purpose of level design is to make situations and environments in-game that engage the player.
Game Engines
Unreal Engine
What is the engines standard programming language?
UE5 uses a visual programming language called 'Blueprints', which can be transferred to C++.
What are the pro's and Con's of UE5?
https://www.quora.com/What-are-the-pros-and-cons-of-Unreal-Engine-and-CryEngine
Pros
UE is the most powerful gaming engine, as well as being useful in TV and Film.
It can create games with a high graphical standard.
Well known in the games industry, and widely used by many studios.
Cons
It can take a long time for projects to open, not even accounting for shaders that load once it is.
Documentation (especially for UE4) was hard to come by, meaning it was difficult to learn the engine.
What are the variables, and what do they do?
https://docs.unrealengine.com/5.0/en-US/blueprint-variables-in-unreal-engine/
Boolean - Represents a 'True' or 'False' value.
Byte - Represents a whole number between 0 and 225.
Interger - represents a whole number value between −2,147,483,648 and 2,147,483,647.
Interger64 - represents a whole number value between −9,223,372,036,854,775,808 and 9,223,372,036,854,775,80.
Float - Represents a Number value with a decimal.
Name - Represents a piece of text that is used to identify something in game.
String - Represents a group of alphanumeric characters.
Text - Represents text that is displayed to users.
Vector - Represents a set of three numbers (X, Y, Z) which is useful for 3d Coordinates and RGB colour data.
Rotator - Represents a group of numbers that define rotation in a 3D space.
Transform - Represents a set of data that combines translation (3D position), rotation and scale.
Object - Represents blueprint items, such as Lights, Actors, StaticMeshes, Cameras and SoundCues.
what are the different blueprint types?
https://docs.unrealengine.com/5.0/en-US/types-of-blueprints-in-unreal-engine/
Level Blueprint
A level blueprint is a specialised type of blueprint that acts as a level wide global event graph. Each level has its own 'Level Blueprint', which is created by default and can be edited within the editor. New level blueprints can't be created through the editor.
Events that apply to the level as a whole or specific instances of actors within the level, can be used to fire off sequences of actions in the form of 'Function Calls' or 'Flow Control Operations'.
They also provide a control mechanism for level streaming as well as binding events to actors within the level.
Blueprint Class
A blueprint class is something which allows creators to easily add functionality on top of already existing gameplay classes. Blueprints are created within the unreal editor, and instead of typing out code the creator is able to drag and drop a plethora of different blocks together to create lines of code.
Data-Only Blueprint
A Data-Only Blueprint is a Blueprint Class that contains only the code (in the form of node graphs), variables, and components inherited from its parent.
Data-Only Blueprint are edited in a compact property editor, but can also be "converted" to full Blueprints by simply adding code, variables, or components using the full Blueprint Editor.
Blueprint Interface
A blueprint interface is a collection of one or more functions that can be added to other Blueprints.Any blueprint that includes the interface is guaranteed to have the functions.
Blueprint interfaces can be made by creators through the editor, and come with certain limitations.
These are:
They cannot add new variables,
cannot edit graphs,
Cannot add components.
Blueprint Macro Library
A Blueprint Macro Library is a container that holds a collection of Macros (self-contained graphs) that can be placed as nodes in other Blueprints.
What games have been made using Unreal Engine 5, and were they successful or not?
The most popular game made using Unreal Engine is Fortnite, a battle royale that was released on 21st July, 2017. The game is immensely popular, due to its replayability and paid cosmetics, and the game currently runs on a build using Unreal Engine 5 as a base (as of 05/12/22).
Unity
What is the engine's standard programming language?
Unity uses C# and C++ as its main programming language.
What are the pro's and Con's of Unity?
Pros
Unity is free for games with an income of less then $100,000 a year.
Great for casual 2D and 3D games.
Strong support for mobile games development.
Wide cross platform capabilities.
Huge knowledge base and large community.
Cons
Expensive license for games with over $100,00 a year.
High system requirements for more advanced features.
No access code for small developers.
It can be hard to learn.
The need to learn a programming language to create an original game.
What are the variables, and what do they do?
Double - Represents a number value containing a decimal.
string- Represents a group of alphanumeric characters.
Boolean - Represents a true or false value.
int - stores integers without decimals, such as 123 or -123.
char - stores single characters, such as 'a' or 'b'.
what are the different blueprint types?
Unity has its own blueprinting tool called bolt. This adds visual scripting to unity, which allows creators to make game mechanics without writing code.
What games have been made using Unity, and were they successful or not?
Some famous games made using unity are Fall guys: Ultimate Knockout, and Among us. These games are insanely popular, due to social media coverage by content creators on platforms like Twitch and Youtube. Furthermore, these games are family friendly, which means that children all over the world play them everyday.
Planning
Mood Board
Moodboard: I want to make a level based in a dystopian themed market. With this in mind, I created a mood board compiling different images of multiple different markets from Cyberpunk 2077, which is my main inspiration.
These levels are usually quite cluttered and claustrophobic feeling - I want to mimic this feel with my own design.
Level Design
When planning my level, I tried to emulate the claustrophobic feeling shown within the cyberpunk markets. I enjoyed making the stalls look wonky and hand placed, as it gave the world an organic, lived in feel. I feel that my plan works well, as it is clearly drawn and labeled.
When creating my level design within Unreal Engine 5, I kept it close to my original plan, However when I decided that one of my mechanics was going to be double jumping I decided that I would add raised 'balcony' areas, which could only be accessed by using this mechanic.
Overall, I believe my level design was extremely effective! It has a good mix between practical uses for my mechanics as well as looking good. I'm really happy with my use of textures, which help to make the level feel more real and also helped my personal understanding of materials in UE5.
Something I could improve upon in the future is keeping in mind lines of sight, and their importance. While this level would still be playable, The left side feels very congested contrasted to the right side, which is quite sparsely filled.
Mechanics
When deciding what mechanics I wanted to create, I focused on using a mix of ones that would be more difficult to make, as well as ones that would be easier. In the end I decided to work on an Enemy AI [Which could be expanded upon in the future with a health system, etc.], A weapon pick-up system, and a Double jump.
To create my chosen mechanics, I used tutorials from YouTube as a guide. These guides were beneficial in my understanding of creating the mechanics, and will be referenced throughout my work.
1.
Enemy AI
[a]
Firstly, I go to blueprints, blueprints class, and create a character - this will be our AI, as we want it to be able to move and interact. Going into the mesh panel, I use a character mesh that I imported myself, so that it would match the aesthetic of my level [a1].
The next step is to create a system to let the ai know if the player character is in front of them, and I create this using a pawn sensing component. This gives the ai the ability to 'see' the player, and this connects to a stretch of code which can be seen in [a2]. This code makes the ai look for a player, and if they find one they are programmed to follow. I create the 'isseeingplayer?' variable, which means that if the ai doesn't see a player it will not follow, but if it does see a player it will.
In [a3], we can see that if the ai sees a player, It will follow the player and punch. I worked on an animation montage for walking to running, which can be seen in [a4] and [a5], and if the ai is close enough, It will play an animation of hitting the player. In [a6], we can see the code which determines the speed of my ai, as the vector length of the velocity is the speed the ai will run at. Lastly, I created a system that made sure that if the ai couldn't see the player, it would stop moving [a7].
This simple ai system can be expanded in many ways, such as adding a health system, the ability for enemies to pick up weapons which have more damage then their fists, and many more. During the creation of this system, I had a few instances where I got confused, but watching the tutorial again helped me to finish and make a successful system. I only wish I had more time to create a health system to go along with it!
[a1]
[a2]
[a3]
The making of my animation montage [a4]
[a5]
[a6]
If the AI can't see the player, It will stop moving. [a7]
2.
Double Jump
[b]
This mechanic was the easiest of the three to complete - After entering the third person character blueprint, I move to the details panel and change the 'Max Jump Count' from one to two. A programmer can change this number to however many they want, meaning that unlimited jumps can be used, however I'm sticking with two.
Whilst this mechanic is really simple to create, I believe it is really effective at what I set out to make!
3.
Weapon Pick-Up system.
[c]
Firstly, I start out by creating a new blueprint, called BP_weapon. In the viewport, I place my model of a gun, before adding a box collision and adjusting the size. Next I create a Blueprint Interface, which can interact with other lines of code to convey messages. Within this blueprint, I create a new function, 'Pick up', before moving back to BP_weapon. I implement this interface from the 'interfaces' section of the 'my blueprint' tab, adding an 'Event Pick Up' node to my workspace. I add a print string, for development purposes, then a delay until next tick and delete node actor so that after picking up the weapon from the spawn, it would disapear. [c1].
Moving back to BP_ThirdPersonCharacter, I began working on the keybind for picking up my item. In this code [c2] , when I press E, it will search for an actor that can be picked up - my gun- before picking it up. Testing that this works, I then move onto adding a new variable, 'ItemModelToPlace'. I make it a static mesh, and then move to the construction script tab. I drag the item model component node into the workplace, connecting it to a 'set static mesh' node, which means that an artist can change models quickly and easily [c3].
Moving back into the third person character blueprint, I select the mesh and create a new static mesh. This will be our equipped item! Within the details panel I create a 'parent socket, and move that to be on my characters hand. I then move into my character's skeleton, and add a socket in the same place as my parent socket. I then added a 'preview asset' of my handgun, and scaled it so that it fit in my character's hand properly [c4] .
[c1]
[c2]
[c3]
My handgun spawn in my level.
My character model holding the handgun using a socket.
I scaled and sized the gun into my character's hand, so it looked as realistic as possible.
References
[a]
The Easiest Way to Make a Simple Enemy AI in Unreal Engine 5. (2022). [Film]. YouTube.com: Gorka Games.
[b]
How to Double Jump in Unreal Engine 5 In Under 2 Minutes (Tutorial). (2022). [Film]. YouTube.com: Matt Aspland.
[c]
How to Make a Simple Pick-Up System in Unreal Engine 5 - Beginner Tutorial. (2022). [Film]. YouTube.com: Gorka Games.
Evaluation
Within the 'Game Engines' unit, I was tasked with looking at the pros and cons of different industry standard game engines, creating a level design, as well as three different mechanics which could be used in an actual game.
Going into this project, I decided that I wanted to create a futuristic market level, much akin to the markets shown in Cyberpunk 2077 - I wanted to use lots of smoke, sparking wires criss crossing above people's heads, and a claustrophobic feeling between stalls. I created my level design in Photoshop - creating a moodboard of different spaces taken from Cyberpunk 2077 I tried to replicate the feel and look, also thinking of main industry principles such as line of sight. Whilst I was happy with this level design moving into working with Unreal Engine 5, I ended up branching out from my initial plan and adding extra areas due to my chosen mechanics. In future, I would make sure I had planned my mechanics before creating the level, so I knew what needed to be included. However, I am happy that I was able to think quickly and resolve the issues revolving around my mechanics not fitting well into my level easily, by adding raised balconies so that my double jump mechanic would have a use. This also gave my level a more interesting structure, as it meant I could place items underneath these raised areas. I really enjoyed creating my level - as a creative person more then a coder, It gave me the chance to branch out and create something that looked nice whilst also being useful.
When I moved onto creating my mechanics, I decided to make an enemy AI, a weapon pick-up system, and a double jump. I really struggled whilst coding - I struggle to understand coding , as well as what my code does when I have created it. I relied heavily on YouTube video tutorials to aid me whilst I created, especially when creating my enemy AI and weapon pick -up system. I found these systems hard to create, as they required lots of different blueprints I had to create, however once I managed to make them work it was very satisfying. I created my double jump as a break from difficult mechanics, as It was extremely simple to make. In future, I want to work on my confidence when coding within Unreal Engine - during my free time I plan on following more tutorials and making more mechanics so that I can get better.
If I were to create this project from scratch again, I would make sure I knew what my mechanics were going to be before creating my level, as it would waste less time editing and making sure that everything could be used. Furthermore, I would create a strict schedule of work, so I had enough time at the end of the project to test my level and mechanics as well as making me not feel as stressed about how much work had to be completed. In the future, I would like to work on creating more level designs, as I found it extremely enjoyable! I would also like to personally develop my knowledge of coding within Unreal Engine 5, as I feel it would make me a more useful candidate for hire within the game industry.