Technical design showcase
During my professional career, I've worked as a Technical Level Designer. It is with prototyping, setting up comprehensive systems and experimenting with mechanics as well as creating editor tools I can contribute the most. So I'm hoping to pass along some of the things I've learned during my career here. I'd love to share some tips and tricks while explaining my thought process and workflow behind the more complex technical challenges I've run into during this project.
Lightweight pick up system
Part of the core gameplay loop is collecting material and buying upgrades to the player suit. Setting up a cheap and scaleable system early on was high on my list of tasks. I looked at how Destiny handled automatic pickups such as Glimmer (currency) and ammo for references. Using good collision filtering and an Interface I created my "Lightweight pickup system" for physics objects.
Below you can get an overview of the individual components as well as a walkthgough of the system.
System component breakdown​
​
-
Player with sphere collision​
-
Collision filtering​
-
-
Blueprint interface for communication
-
Passing values without creating hard references​
-
-
Loot blueprint and associated data table for individual properties
-
Easy to tweak and balance​
-
-
Interactive volume
-
Loot crate with RNG-functionality
Useful information mentioned
in my walkthrough below​​​
​​
Collision filtering:
https://www.unrealengine.com/en-US/blog/collision-filtering
​
Practical tips for managing collision settings & queries:
Object specific FOV and animation groundwork
To be able to change the FOV is an important addition to every First Person game, both to give the option for players to increase their spatial awareness but also to prevent motion sickness and headaches. When rigging the first person arms and the Blaster I found a sweet spot using an FOV of 75. It gave a good mixture of providing a sense of scale while looking good as well as not obscuring the combat corridor of the viewport.
Using an object specific FOV to compliment the viewmodel and animation has a huge impact and affect how the game plays and feel on a moment to moment basis. Doing these two well helps both playability and replayability.
To support two different FOVs I created a Material Function adjusting the World Position Offset which mimics rendering the viewmodels on top of existing geometry by properly scaling the models vertices accordingly. This function isn't just useful for preventing the weapon from clipping into walls and other meshes but also for keeping the FOV of the viewmodel and weapons consistent when changing the world camera FOV. Utilizing it preserves all animation and poses betwen changes and enables me to work non-destructive.
(This is something that will have native support in Unreal Engine 5.5).
Here you can see the player arms and weapon maintainig the same FOV of 75 that I use when animating in Blender while toggling the world camera FOV between 110, 100, 90 and 75. The system is provides flexibility to test and change FOV between multiple viewmodels and world camera during development. ​​​I'm glad I spent time researching the matter and implementing a solid workflow and pipeline for animations so I can stay away from potential pitfalls and having to remake a lot of functionality later on.
In the video below you can see how the function and the parameter called Render Depth adjusting the clip plane distance from the camera and actively prevents the viewmodel from clipping into geometry.
Level quick switch manager
I often find the content drawer to obscure my viewport when being used and the option to choose File and/or Ctrl+P and then open level to be unintuitive to use. This lead me to create a Level Manager using an Editor Utility Widget to improve my own workflow when working between levels and gyms. The Level Manager widget is saved to a project specific editor layout which can easily be turned off and on. For scalability, additional options and support for more levels can be added when needed.
Tool features:
​
-
An option to quickly switch between levels with just a click
-
While instantly saving the one switched from
-
-
An option to create a brand new level from a template​
-
This can be done by both writing in a new name or generate an automated one​
-
Saves the new one in the correct content folder
-
-
Quickly copy and paste viewport camera
-
To enable going back to the desired location without using a keyboard shortcut
-
-
Disable all ther lighting in a map
The video above showcases the usage of the Level Manager.
The timestamps below exhitbits the following features:
00:00 - Level quick switch, 00:10 - Copy and paste viewport camera, 00:20 - New level from template
Heatmap tool using Geometry Scripts and Render Targets
Tool features:
​
-
Using Geometry Scritpting to create a level matching plane
-
Tracks players location with an additive material
-
Draws material to Render Target during runtime
-
A baked Render Target can be exported to disk
-
Size, Strength and Resolution can be changed
-
Renders can be cleared or saved during playtests to analyze player movement and positioning across the testet level
In time for me to start hosting playtests of my blocked out levels, I wanted to have a heatmap tool in place. Using heatmaps to track the players positioning and decisions is a great way to get an overall idea for flaws, flow and readability of the level and combat design.
The tool tracks the players world location and using a Multi Trace for Objects to trace downwards for the plane generated using Geometry Scripting (which can easily be adjusted to fit any level and size). The plane is always set to ignore the player so it can be placed far below the surface if the level is uneven. The downward trace Draws an additive heatmarker material (borrowed from Epic ContentExamples sample project) to the selected Render Target at runtime. On EndPlay the material gets baked to a new Render Target which can be seen in editor as a level overlay or exported to disk in a selected format.
I made sure to set up the tool to be as intuitive as possible to use. All a content creator would need to to is to drag the tool in to the level and set the plane size to match the area they want to test it in. Size, Strength and Resolution can easily be tweaked in the Details tab as well as clearing the Render Target before testing the level again.