Genre First-person horror
Engine Unreal Engine 5
Role Gameplay & UI programmer
Date March 2023
Link https://store.steampowered.com/app/2290480/The_Obscura_Experiment/
Videos
<aside> ❓ The Obscura Experiment is a first-person horror game made by a team of 26. You play as scientist Priya Ellis who must escape from the monstruous experiment that has escaped. Every second you aren’t running, the Dark Matter is getting closer.
</aside>
Example of code used to interact with a given object
Interact interface
Example of interaction with door lever
<aside>
💡 Early on, I mainly focused on the interaction system. Every object had to be activated with a common input (e.g. “E to interact”)
, but also had to activate a unique action. I found out that Unreal Engine’s blueprint interfaces could be used to remedy this and so they were used all throughout development.
Paired with a BP_InteractComponent
that was be placed in every interactable object, this streamlined the way our programmers could code every interaction. Step by step, one has to:
BPI_Interactable
into the blueprint that activates a unique action so that the designer/programmer can decide HOW the action will activate.BP_InteractComponent
into the same blueprint so that the designer/programmer can decide WHAT action will activate.The biggest challenge was to optimize the code and keep it organized all while making sure each object had its own functions. In the end, the 6 interactable objects all share a common component which have their own behaviour.
</aside>
Component shared among all objects
Pause / Settings menus
<aside> 💡 My role expanded to UI programmer. It began with me coding every menu (main menu, pause menu, settings) and making sure the technical side of it was functional.
I later established the general UI aesthetic and applied it to every aspect of the UI including the HUD. The idea was to go for a minimalist sci-fi blocky look with cyan being the prominent accent colour.
I made widget templates that could be customized as desired. Several widgets from the same template could then be used while having different functionalities.
</aside>
<aside>
💡 Hovering an interactable object displays a prompt that shows the correct keybind to press regardless of the input method (mouse & keyboard or gamepad)
.
The HUD also updates its keybind indicators based on the input used on runtime. It is done by getting the GameInstance
’s EventDispatcher
for input detection. The moment the input method is changed, the UI will follow immediately.
</aside>
Pause / Settings menus
<aside> 💡 My role expanded to UI programmer. It began with me coding every menu (main menu, pause menu, settings) and making sure the technical side of it was functional.
I later established the general UI aesthetic and applied it to every aspect of the UI including the HUD. The idea was to go for a minimalist sci-fi blocky look with cyan being the prominent accent colour.
I made widget templates that could be customized as desired. Several widgets from the same template could then be used while having different functionalities.
</aside>
<aside>
💡 Hovering an interactable object displays a prompt that shows the correct keybind to press regardless of the input method (mouse & keyboard or gamepad)
.
The HUD also updates its keybind indicators based on the input used on runtime. It is done by getting the GameInstance
’s EventDispatcher
for input detection. The moment the input method is changed, the UI will follow immediately.
</aside>
Objectives / Logs / Interaction / Dialogues indicators
Function to detect input method
Actions bar
Menu prompts
Data Table for keybind prompts
<aside>
💡 Calling an EventDispatcher
located in the PlayerController
updates the currently used input method throughout the UI.
The correct keybind is then displayed and is also affected by the language set by the user (whether English or French). A Data Table was used to translate the prompts.
Because of Unreal Engine’s lacking support for gamepad, tasks related to it were a bit more tedious. The SetFocus
nodes were very much used.
</aside>