Basically, I’m trying to make a PSX styled horror game, tank controls, fixed camera, low poly models, all that. However, I’m having trouble figuring out an interaction system like from those games, where you walk up to something, say a boarded up window and the game pauses and your character says something in a text box. I’d appreciate any help.
For a classic Silebt Hill interaction, probably best to make a base interactable object class, give it a sophere or box collision set to overlap pawn (and tick triggers overlap events) on the collision settings. Then add On Begin ( and End) Overlap events for it from the bottom of details panel, and in the new begin overlap event it makes, check if other actor = Get Player Pawn and pop up a widget with some text and buttons to press to trigger whatever event should happen.
Hello @BMFrognipple ,
If I understood correctly, here’s a solution that might help.
The idea is to create a reusable system where each object can display a different message without needing to create a new widget or interaction logic every time.
First, create a Blueprint Interface called BPI_Text and add a function named InteractionText with a Text output of type Text.
Next, open your Blueprint Actor (in this example, BP_Interaction), add a Sphere Collision component, and then add the BPI_Text interface through Class Settings.
Once the interface has been added, open the InteractionText event from the Interfaces section. Create a variable of type Text, mark it as Instance Editable, and connect it to the Return Node. This allows each instance of BP_Interaction placed in the level to return a different message.
The next step is to create a simple Widget Blueprint to display the message on screen. In this example, I used a Canvas Panel with a Text Block.
To make the Text Block display the correct message for each object, create a Binding for the Text property of the Text Block, Call it GetText. Inside Function, create a variable of type BP_Interaction (the same Blueprint Actor we created earlier) to store a reference to the actor displaying the message. Make sure to enable both Instance Editable and Expose on Spawn for this variable, as this will allow us to pass the actor reference when creating the widget.
Using that reference, call the InteractionText interface (Message) and connect its Text output to the Return Value of the GetText function.
This way, whenever the widget updates its text, it will retrieve the value directly from the BP_Interaction instance that created it. As a result, the same widget can be reused across multiple objects without manually changing its content.
Finally, add the interaction logic inside the actor Blueprint. When the player enters the sphere collision:
- Create the widget.
- Since the BP_Interaction variable was marked as Expose on Spawn, a new pin will appear on the Create Widget node.
- Connect Self to that pin so the widget receives a reference to the actor that created it.
- Store a reference to the created widget by dragging from the Return Value and selecting Promote to Variable.
- Add the widget to the viewport.
- Temporarily disable player input to prevent movement while the message is being displayed.
- Create a Set Timer by Event to start a countdown and, once it finishes, execute the logic that re-enables player input and removes the widget from the screen.
- You can disable the sphere collision if you want the message to be displayed only once.
The advantage of this approach is that all the logic is centralized in a single Blueprint. Whenever you place an instance of BP_Interaction in the level, you’ll see the previously exposed Text variable in the Details panel. Simply enter the message you want to display, and that text will appear when the player interacts with that object.
Hope it helps!







