Home About & Resume Contact

Lost Lab


1 / 4
2 / 4
3 / 4
4 / 4

Game screenshot no1.
Game screenshot no2.
Game screenshot no3.
Game screenshot no4.

About the project:

Lost Lab is a university project showcasing a scanner game mechanic inspired by "Scanner Sombre" (Introversion Software 2017).

Lost Lab is a exploration horror in which you, the player, are a prisoner forced to risk your life in order to become free again. You are tasked with carrying out a mission for a secret government agency. You must retrieve artefacts from a anomaly called the Lost Lab. All you have is a scanner to detect the environment and a radar to locate the artefacts near by. You're not the first and you won't be the last... Good luck!

Click To Skip

Engine:

Unity/UE5

Platform:

Windows

Team size:

1

Development time:

1 month (Unity)/ 8h (UE5)

Project files:

Unity C# Github

UE5 C++ Github

What I did:


Gameplay presentation:

Unity C#

UE5 C++

Details (Unity / C#)


Scanner mechanic

The main point of the scanner mechanic is to display a large amount of points that will be placed on the level geometry. The more points displayed the more accurate the level layout will become.

The scanner mechanic uses VFX Graph to display points as a particle system. The main scanner script sends point data as a custom struct containing information for each point. In this example I am sending the point position, color, size and a int to indicate if the point is using it's own default gradient color or a new static color.

This custom struct data is then added to a list containing all new points to be displayed. When ready that list is then added to a graphics buffer which is sent to the VFX Graph. After that I simply sample the graphics buffer to gain the required data and initialize the new particles.

This method enables more customisation of single particles.

Details (UE5 / C++)


Scanner mechanic

The main mechanic is very similar to how it was implemented in Unity with a big (and obvious) difference in the Particle System.

In UE5 I created a very simple Niagara System which has two input arrays, one for particle position and one for particle color (Vector/LinearColor). These arrays are then read to apply both position and colour on submission. So all we have to do in code is to create the NiagaraComponent, Activate it and feed the correct ArrayData into the values:

But how do I get the particle data? The normal scan implementation is the same as the Unity one, however the Big Scan differs a bit.

Firstly when the scan begins I update the ScanAngle based on the ScanRate and call ShootBigScanRays method (Figure 1). I create two arrays (one for particle positions, one for particle colours). Next I get the horizontal step per ray as we want to shoot these rays inside provided angle. We then iterate through the amount of rays (Figure 2) we want to shoot horizontally and add a small random deviation (just to look good, as uniform placement looked too uncanny). RotateRayObjectsToAngle (Figure 3) will rotate the reference object based on provided max angle, the vertical angle and degrees the ray should shoot in. It will perform a LineTrace and return the result. Becasue we passed in the HitResult as a reference if we return true we can still access the LineTrace result with the correct information. And Lastly we update the NiagaraSystem with the new point data. Next frame we will increase/decrease the VerticalScanAngle to run the function again.

Figure 1.
Figure 2.
Figure 3.