This new version introduces new features centered around the layout system. A layout defines the appearance and interactivity of the touch interface. Layout system is in it’s experimental state. Despite our testing, bugs and crashes may occur. Features may be missing or existing ones may be modified or removed. Don’t hesitate to report problems via email or on discord.
This new system has several objectives:
Simplifying developers’ work #
Previously, to modify the in-game touch interface, you had to modify a structure via functions or by yourself. The process could be unnecessarily complex, like changing the appearance of a virtual control, for example. To simplify matters, I had to design an entirely new system based on classes and UObjects. This allows to access and expose functions in blueprint, which makes the job a lot easier because it’s based on something you already know!
For me, this means I can structure my plugin better, add new functionality more easily and simplify debugging.
Virtual Control Setup (old system)

Touch Interface Layout (new system)

Greater Customization #
This new design allowed me to add new types of interaction like sliders and knobs. The new layer system now allows more customization, with the addition of progress bars, text, and user widget support. The plugin’s UObject-based structure allows developers to easily modify and/or extend the plugin’s functionality.
Main new feature #
Layout Component System (UObject based) #
A layout component is divided into three parts: the ULayoutComponent contains what is required to be placed on the touch interface. ULayoutComponentLogic contains the user interaction logic, while ULayoutComponentDecorator defines the component’s appearance. These three objects contain properties and functions that are displayed in blueprint to facilitate workflow.
New Control Type #
- Slider : The slider can be used, for example, to change the weapon or object selected, modify the flight height or simply change a value. It contains numerous parameters to meet a maximum number of use cases.
- Knob : The Knob is a rotary button that can be used as a steering wheel on a car game, or as a fishing reel on a fishing game. It can also be used as a selector.
- Free Touch Gesture support : Free Touch class supports gestures.
New Layer Type #
- Progress Bar : Add a progress bar directly in the component to display the recharge time of a skill, for example.
- Text : Enables you to add text directly to a component, for example to display the ammo in the weapon.
- UserWidget : Adds a UMG widget (UserWidget) directly to the component. Please note that no interaction is possible.
- Flipbook : Adds an animation (flipbook) directly to a component.
Anchor System #
The anchor system is similar to that used by UMG, allowing the position of components to be adapted to screen size and aspect ratio.
New Editor #
The layout editor introduces new ways of modifying components. A Widget Handle makes it easy to change component position and size. An Anchor Handle lets you quickly modify anchors. Position, size and anchors can still be modified via the details panel. This new system supports multiple selection.
Improvements #
- Remove ensure condition in Virtual Input Haptic
- Option to enable / disable fade feature of touch interface (only in Layout System)
Known Bug #
- [VCS] Background blur preview not accurate.
- Hovering a child in a group triggers the parent’s hover.
- Recenter with joystick logic doesn’t work as expected.
- Text layer : preview not accurate.
What’s next? #
You can follow the planned improvements and new features via the roadmap. You can vote for the feature you’d like me to develop first.
On the editor side
- I’m thinking of merging the decorator tree with the component tree.
- I’m thinking of merging the ULayoutComponentDecorator class and the ULayoutComponentLogic class with the ULayoutComponent class in order to simplify the workflow for blueprint developers (designers) as much as possible.
- In line with the previous reflection, create presets instead of forcing you to create logic for each component.
- I’d also like to make it easier to extend the plugin’s functionality, for example by adding a new type of control.
On the runtime side
- Improve the plugin’s performance and structure.
- Improvements to the motion recognizer and shape recognizer.
