virimine

INTO THE DREAMSCAPE 1: DEV JOURNAL

DEVELOPING A SIMPLE PROTOTYPE IN UNREAL ENGINE 5

Hello adventurers!

Dreamcast 2050 is a small project we developed with Alejandro Rosado to explore spatial virtual interactions. The prototype was developed over the course of few weeks.

As a personal goal, in order to get more familiar with UE5 and Blueprints while applying some software design architecture concepts, just to see how they can be applied in the development process. Having previous experience in Unity and C#, getting used in the engine was faster than I thought. Despite the quirks, and difference conveniences, knowledge is transmittable between engines.

To keep things short, I will describe how most things were implemented briefly and focus on the Hidden Objects System. which I got much love. Since this is a prototype, most parts of code are ehck and would need further implementation.

Project Description

The user receives a custom-designed dreamcatcher controller. The narrator introduces the setting and prompts the user to use the controller to reveal some hidden objects. As the user uncovers the objects, text descriptions appear on the screen, gradually revealing details about the world. Once all objects in the initial sequence are found, the narrator asks the user to make a choice between two objects: a teddy bear (save path), symbolizing prolonged dreaming , or an alarm clock (destroy path), representing the return to wakefulness.

The process of finding objects, uncovering the story, and making a choice is repeated one or two more times, depending on the consistency of the user’s decisions. The user must choose the same path—either “save” or “destroy”—twice to reach an ending. There are six possible narrative paths that lead to one of two outcomes: the preservation of the dream world or its destruction.

Let’s dive into the process.

1. When the experience begins (OnBeginPlay):

  • Background music starts.
  • Hidden objects are randomly spawned.
  • Events are getting bound to Actor Events
  • The narrator begins delivering the story.
  • When the narrator’s voice-over ends, the custom “revealer” tool is activated, allowing users to search for hidden objects.

2. Hidden Object System

Hidden objects were managed using a Spawner which was acting as a Hidden Object manager:

  • Objects were randomly spawned within designated bounds, adding replayability and flexibility for future updates.
  • Object data (name, description, 3D mesh) was stored in Data Tables. The Spawner initialized each object by reading the data from the table and passing it to a Hidden Object actor before spawning it.
  • Hovering over an object starts a timer and plays an audio cue (SFX).
  • If the timer completes, the object is collected, triggering a collection SFX and an OnCollected event dispatcher. The Description Text (bound to the OnCollected dispatcher) is updated with the object description and appears for few seconds before it fades out.
  • Interrupting the hover resets the timer and stops the SFX.
  • When all objects were collected the story progresses.

Hidden Objects Datatable

Hidden objects used a Custom Stencil Buffer, to ensure that objects remained invisible until hovered by the “revealer” tool.

Hidden Objects Material: the Stencil Mask and Iridescent Effect applied to the objects

4. Choices And Narrative Branching

Story progression was driven by user choices, influenced by interactions with Choice Objects. These objects were implemented as a parent class with a string ID field, inherited by two child objects: Teddy Bear: assigned the ID “save” and Alarm Clock assigned the ID “destroy.”

The ID determined the narrative branch. A consistent choice of “save” incremented a saveScore variable by 1 while the opposite was done for a ‘destroyScore’ variable leading to different narrative paths. (<- bad architecture, i think)

5. Revealer, Description Text & Audio Manager

  • The revealer volume was controlled by the controller.
  • Description Text was just being updated with the object text and getting visible/invisible with a fade out
  • Playing dialogues and trigger on Dialogue End event dispatchers

Resources

xx

Blueprints

xx

Scroll to Top