
Recently, I have joined a small team developing a First Person Horror Game in UE5. This is an unpaid position, volunteer work, but the project is so promising and has some interesting things I'd be working on so I was more than happy to join.
My first bits of work on this project - after hooking up the basic movement - has been in prototyping the main interaction system using a device the player carries around with them to access the park's systems. I wanted to push immersion and player interaction, so after the first prototype of the system, which involves your usual walk up and press the interact key, I prototyped two other versions which are much more involved.
This entire interaction system is, of course, scalable. There's two, technically three components to the system. For one, you have the player, which has it's own interface that is needed for the tuning interaction so it can tell the player when it's done tuning. Then, you have two other interfaces working with it - the interaction interface and the activateable interface. If an object has an interaction interface, then when the player hits the interaction key on it, then the interaction will be performed on it. If it has the activateable interface, then the interaction actor will send a message to it's connected actor via this interface that it needs to activate. The connected actor is dictated via the editor.

This is an example from the Connection Interact Point. The 'Name' is how the text is updated on the physical BYTE object, using an output node from the interact interface. The 'Targeted Object' point is what actor will be activated. Targeted Object only accepts objects of BP_ActivateableObjectParent, which all activate objects must be a child of. This parent implements the activateable interface as well, so all activateable objects have the interface.
You can view the Blueprint Prototypes on the top, and see my progress so far on the C++ implementation on the bottom on the left of this page.Whilst the C++ Implementation works largely similarly so far, it doesn't yet have the function to get the names, but does have some extra scalability with Interaction Points. Now, Interaction Point Types are kept in an enum and can easily be switched between without any other changes made. Just choose from the drop down and it'll match the behaviour.

