UtilityBelt

Input-method detection, gamepad-friendly focusable widgets and menus, live input prompts, typewriter text, easing, pooling and more for Blueprints and C++.

Malware-scannedSigned licence keyInstant downloadUpdates included
UtilityBelt β€” screenshot 1
UtilityBelt β€” screenshot 2
UtilityBelt β€” screenshot 3
UtilityBelt β€” screenshot 4
UtilityBelt β€” screenshot 5
UtilityBelt β€” screenshot 6
UtilityBelt β€” screenshot 7
UtilityBelt β€” screenshot 8
UtilityBelt β€” screenshot 9
UtilityBelt β€” screenshot 10
1 / 10
Per-player input-method detection (mouse, keyboard, gamepad) with change events
Focusable Button, Check Box, Slider, User Widget and Panel with focus styling and…
Menu stack with back/close keys, automatic focus, input-mode, pause and cursor handling
Input Image widget and rich-text <input/> tag that show the active device's binding
Typewriter rich-text widget with pre-calculated line breaks and letter/word events
Option selector, named options, tab list and smoothly changing progress bar widgets
$11.99

UtilityBelt is a broad helper library for gameplay and UI work. It tracks whether each local player is using mouse, keyboard or gamepad and raises events when that changes, and it provides UMG widgets that behave properly with a controller: focusable buttons, check boxes, sliders and panels that use their Hovered style when focused, a menu stack with back navigation and automatic focus, option selectors and tab lists.

Input prompts stay correct automatically: the Input Image widget and the rich-text input decorator look up the current Enhanced Input or legacy binding and swap between keyboard and gamepad art as the player switches device. A typewriter text widget plays dialogue one letter at a time with pre-calculated line breaks.

On the gameplay side you get an actor pooling subsystem, a light flicker component, a spring arm with smooth collision avoidance, a NavMesh bounds volume that can be resized at runtime, a replicated physics actor, easing functions, geometry helpers, evenly distributed (Halton) random streams, shuffle bags and an editor visualisation component that draws shapes even when the actor is not selected.

UtilityBelt is part of the Alpha XP utilities collection for Unreal Engine 5.8. Every feature is exposed to Blueprints and C++ (a few low-level helpers are C++ only), it ships with styled HTML documentation, and it is compiled and verified warning-free against a clean UE 5.8 project.

119Blueprint nodes
21Events
UE 5.8Engine build
3Platforms

Key features

  • Per-player input-method detection (mouse, keyboard, gamepad) with change events
  • Focusable Button, Check Box, Slider, User Widget and Panel with focus styling and
  • Menu stack with back/close keys, automatic focus, input-mode, pause and cursor handling
  • Input Image widget and rich-text <input/> tag that show the active device's binding
  • Typewriter rich-text widget with pre-calculated line breaks and letter/word events
  • Option selector, named options, tab list and smoothly changing progress bar widgets
  • Actor pooling world subsystem with optional activation interface
  • Light flicker component with built-in and custom patterns (replicated)
  • Spring arm with smooth collision avoidance and smooth offset changes
  • Easing functions, 2D/convex geometry helpers, Halton random streams and shuffle bags
  • Editor visualisation component and a single-table data-table row picker
  • Project setting to hide the mouse automatically while a gamepad is used

Blueprint & C++ API

The API is organised into these entry points:

ClassTypeNodesUse it for
BeltBPLFunction library17Blueprint library exposing various things in a Blueprint-friendly way e.g.
TypewriterTextWidgetUMG widget11Add to a widget blueprint or viewport.
OptionWidgetBaseUMG widget11Add to a widget blueprint or viewport.
BeltGameSubsystemGame Instance subsystem9Entry point for all the top-level features of the helper system
BeltPooledActorSystemWorld subsystem7General actor pooling system
BeltIndexShuffleBagFunction library7A shufflebag is an array that contains a certain number of items, and can randomly withdraw one at a time until there are none left.
InputImageImage7A special widget containing an image which populates itself based on an input action / axis and can dynamically change based on the active input method.
MenuStackUMG widget7Represents a modal stack of menus which take focus and have a concept of "Back" Each level within is a MenuBase, which must be "pushed" on to the stack.
BeltEasingsFunction library6Static nodes β€” callable from anywhere, no object needed.
NamedOptionWidgetBaseOption Widget Base6Subclass of UOptionWidget base to provide convenient access via FNames, on top of the regular integers.
+ 10 more classesFunction libraries & objects31Grouped by feature in the node tables below.

Callable runs when executed Β· Pure no exec pin, returns a value

Typewriter 11
NodeTypeAvailable onDescription
Set Text(In Text: Text)CallableUMG widget
Get Text() β†’ TextCallableUMG widget
Play Line(In Line: Text, Speed: Float)CallableUMG widgetPlay a line of text. Note: if, when line splits are calculated, this line exceeds MaxNumberOfLines, then only this number of lines will be played by this call.
Get Current Line() β†’ Out LineCallableUMG widget
Has Finished Playing Line() β†’ BooleanCallableUMG widgetReturn whether the entire line has finished playing
Has More Line Parts() β†’ BooleanCallableUMG widgetReturns whether the number of lines exceeded MaxNumberOfLines and there are still parts to play.
Play Next Line Part(Speed: Float)CallableUMG widgetIf HasMoreLineParts() is true, play the next part of the line originally requested by PlayLine
Skip To Line EndCallableUMG widget
Get Play Speed() β†’ FloatCallableUMG widgetGet typewriter play speed

+ 2 more Typewriter nodes β€” full node reference

Math 3
NodeTypeAvailable onDescription
Sphere Overlap Cone(Cone Origin: Vector, Cone Dir: Vector, Cone Angle: Float, Distance: Float, Sphere Centre: Vector, …) β†’ BooleanCallableStaticReturn whether a sphere overlaps a cone
Heading Angle 2 D(Dir: Vector 2D) β†’ FloatPureStaticEquivalent to FVector::HeadingAngle but for FVector2D
Angle Between 2 D(Dir A: Vector 2D, Dir B: Vector 2D) β†’ FloatPureStaticFind the angle between two 2D vectors
UI 3
NodeTypeAvailable onDescription
Set Widget Focus(Widget: Widget)CallableStaticSet the focus to a given widget "properly", which means that if this is a widget derived from UFocusableWidget, it calls SetFocusProperly on it which allows a c…
Insert Child Widget At(Parent: Panel Widget, Child: Widget, At Index: int) β†’ Panel SlotCallableStaticInsert a child widget at a specific index
Find Closest Widget In Input Direction(From Widget: Widget, Direction: Vector 2D, In Parent: Panel Widget, Angle Degrees: Float) β†’ WidgetCallableStaticUtility function to find an input widget based on an input direction. Unlike regular UI navigation, this supports a full 2D direction and not juse Left/Right/Up/Down
Random 6
NodeTypeAvailable onDescription
Make Balanced Random Stream(Seed: Integer64) β†’ Belt Balanced Random StreamPureStatic
Balanced Random() β†’ Float, StreamCallableStatic
Balanced Random 2 D() β†’ Vector 2D, StreamCallableStatic
Balanced Random 3 D() β†’ Vector, StreamCallableStatic
Balanced Random Vector() β†’ Vector, StreamCallableStatic

+ 1 more Random nodes β€” full node reference

Streaming 2
NodeTypeAvailable onDescription
Add View Origin To Streaming(View Origin: Vector, Screen Width: Float, FOV: Float, Boost Factor: Float, Override Location: Boolean, …)CallableStaticLet the content streaming system know that there is a viewpoint other than a possessed camera that should be taken into account when deciding what to stream in.
Update Streaming(Delta Time: Float, Block Until Done: Boolean)CallableStaticForce content streaming to update. Useful if you need things to stream in sooner than usual.
Colour 2
NodeTypeAvailable onDescription
Get Perceived Luminance(In Colour: Linear Color) β†’ FloatCallableStaticCalculate the perceived luminance of a colour using ITU BT.709 standard
Get Perceived Luminance 2(In Colour: Linear Color) β†’ FloatCallableStaticCalculate the perceived luminance of a colour using ITU BT.601 standard (more R & B)
Project 1
NodeTypeAvailable onDescription
Get Project Version() β†’ StringPureStatic
DynamicNavMesh 2
NodeTypeAvailable onDescription
Set Location And Dimensions(Location: Vector, New Dimensions: Vector)CallableNav Mesh Bounds Volume
Set Dimensions(New Dimensions: Vector)CallableNav Mesh Bounds Volume
BeltEaseMath 6
NodeTypeAvailable onDescription
Ease Alpha(In Alpha: Float, Func: Belt Ease Function) β†’ FloatCallableStaticConvert a linear alpha value into an eased alpha value using an easing function
Ease Float(A: Float, B: Float, Alpha: Float, Func: Belt Ease Function) β†’ FloatCallableStaticInterpolate with easing function support
Ease Vector(A: Vector, B: Vector, Alpha: Float, Func: Belt Ease Function) β†’ VectorCallableStaticInterpolate with easing function support
Ease Rotator(A: Rotator, B: Rotator, Alpha: Float, Func: Belt Ease Function, Shortest: Boolean) β†’ RotatorCallableStaticInterpolate with easing function support
Ease Quat(A: Quat, B: Quat, Alpha: Float, Func: Belt Ease Function) β†’ QuatCallableStaticInterpolate with easing function support

+ 1 more BeltEaseMath nodes β€” full node reference

BeltGameSubsystem 9
NodeTypeAvailable onDescription
Get Last Input Mode Used(Player Index: int) β†’ Input ModeCallableSubsystemGets the device where the most recent input event of any kind happened
Get Last Input Button Pressed(Player Index: int) β†’ Input ModeCallableSubsystemGets the device where the most recent button press happened
Get Last Input Axis Moved(Player Index: int) β†’ Input ModeCallableSubsystemGets the device where the most recent axis move happened
Last Input Was Game Pad(Player Index: int) β†’ BooleanCallableSubsystem
Get Input Image Sprite(Binding Type: Input Binding Type, Action Or Axis: Name, Key: Key, Device Preference: Input Image Device Preference, Player Index: int, …) β†’ Paper SpriteCallableSubsystem@brief Get an input button / key / axis image as a sprite based on any combination of action / axis binding or manual key
Notify Enhanced Input Mappings ChangedCallableSubsystemDEPRECATED - no longer required Notify this subsystem that changes have been made to the Enhanced Input mappings, e.g. adding or removing a context.
Register Interest In Enhanced Input Action(Action: Input Action, Trigger Event: Trigger Event)CallableSubsystemRegister an interest in an enhanced input action. Calling this will result in OnEnhancedInputActionTriggered being called when this action is triggered.

+ 2 more BeltGameSubsystem nodes β€” full node reference

Lighting Curves 1
NodeTypeAvailable onDescription
Evaluate Light Curve(Curve Type: Belt Light Flicker Pattern, Time: Float) β†’ FloatPureStaticDirectly evaluate a lighting curve. Alternatively, see ULightingCurveComponent.
Light Flicker 5
NodeTypeAvailable onDescription
Play(Reset Time: Boolean)CallableComponent
PauseCallableComponent
Get Current Value() β†’ FloatPureComponent
Set Flicker Pattern(Pattern: Belt Light Flicker Pattern, Custom Pattern String: String)CallableComponentChange the flicker pattern dynamically

+ 1 more Light Flicker nodes β€” full node reference

Pooling 7
NodeTypeAvailable onDescription
Get() β†’ Belt Pooled Actor SystemCallableSubsystem
Add Actor To Pool(Actor: Actor)CallableSubsystemAdd an actor to the pool. Will make the actor invisible, teleport it to the storage location, and disable all physics. You must NOT destroy this actor!
Release Pooled Actor(Actor: Actor)CallableSubsystemRelease an actor back to the pool, instead of destroying it. Will make the actor invisible, teleport it to a far away location, and disable physics.
Get Pooled Actor(Actor Class: Actor, Location: Vector, Rotation: Rotator) β†’ Actor, Was Re UsedCallableSubsystemRe-use or spawn an actor of a given class.
Pre Warm Actor Pool(Actor Class: Actor, Count: int)CallableSubsystemPre-warm the actor pool by creating a number of instances and making them invisible
Drain Actor Pool(Actor Class: Actor, Number To Keep: int)CallableSubsystemDrain the actor pool for a single class of actor, destroying any surplus actors.

+ 1 more Pooling nodes β€” full node reference

Shuffle Bag 7
NodeTypeAvailable onDescription
Reinitialise(Count: int, Seed: Integer)CallableObjectReinitialise the shuffle bag with a new size / seed.
Make Index Shuffle Bag(Outer: Object, Count: int, Seed: Integer) β†’ Belt Index Shuffle BagCallableStaticCreate a new shuffle bag of indexes for accessing items in an array
Get Num Remaining() β†’ intPureObjectGet the number of items left in the bag
Get Num Pulled() β†’ intPureObjectGet the number of items which have already been pulled from the bag
Get Num Total() β†’ intPureObjectGet the number of items both remaining in the bag and which have already been pulled from it
ResetCallableObjectReset the bag, returning all previously retrieved contents to the bag

+ 1 more Shuffle Bag nodes β€” full node reference

SpringArm 5
NodeTypeAvailable onDescription
Set Target Offset Smooth(New Target Offset: Vector, Speed: Float)CallableSpring Arm ComponentSmoothly change the target offset, instead of jumping
Cancel Target Offset SmoothCallableSpring Arm ComponentInterrupt a smooth target offset change, freeze where we are
Set Socket Offset Smooth(New Socket Offset: Vector, Speed: Float)CallableSpring Arm ComponentSmoothly change the socket offset, instead of jumping
Cancel Socket Offset SmoothCallableSpring Arm ComponentInterrupt a smooth socket offset change, freeze where we are

+ 1 more SpringArm nodes β€” full node reference

Focus 6
NodeTypeAvailable onDescription
Simulate PressCallableButtonSimulate a button press
Simulate ReleaseCallableButtonSimulate a button release
Set Focus To Initial Widget() β†’ BooleanCallableUMG widget@brief Set the current focus to the initial focus widget
Set Initial Focus Widget(New Initial Focus: Widget)CallableUMG widget@brief Set the desired initial focus widget. Call to set the initial widget dynamically without overriding GetInitialFocusWidget
Restore Previous Focus() β†’ BooleanCallableUMG widget@brief Try to restore focus to the previously focussed child

+ 1 more Focus nodes β€” full node reference

InputImage 7
NodeTypeAvailable onDescription
Set From Action(Name: Name)CallableImageTell this image to display the bound action for the current input method
Set From Axis(Name: Name)CallableImageTell this image to display the bound axis for the current input method
Set From Key(K: Key)CallableImageTell this image to display a specific key image
Set From Input Action(Action: Input Action)CallableImageTell this image to display Enhanced InputAction
Get Binding Type() β†’ Input Binding TypeCallableImageGet the binding type that we'll use to populate the image
Get Action Or Axis Name() β†’ NameCallableImageIf BindingType is Action/Axis, get the name of the action or axis to look up the image for

+ 1 more InputImage nodes β€” full node reference

Menu 11
NodeTypeAvailable onDescription
Open(Is Regained Focus: Boolean)CallableFocusable Panel@brief Open this menu. You should only call this if you're NOT using this in a UMenuStack, because the stack will call it for you when you add this menu to it
Request Close(Was Cancel: Boolean) β†’ BooleanCallableFocusable Panel@brief Request this menu to close. The menu can veto this request.
Close(Was Cancel: Boolean)CallableFocusable Panel@brief Close this menu. This ALWAYS closes the menu, if you want it to be able to veto it, call RequestClose
Is Top Of Stack() β†’ BooleanCallableFocusable PanelReturn whether this menu is currently at the top of the menu stack Note: if this menu is not owned by a stack, will always return true
Push Menu By Class(Menu Class: Menu Base) β†’ Menu BaseCallableUMG widgetPush a new menu level by class. This will instantiate the new menu, display it, and inform the previous menu that it's been superceded.
Push Menu By Object(New Menu: Menu Base)CallableUMG widgetPush a new menu level by instance on to the stack.
Pop Menu(Was Cancel: Boolean)CallableUMG widgetPop the top level of the menu stack. This *destroys* the top level menu, meaning it will lose all of its state.
Count() β†’ intCallableUMG widgetGet the number of active levels in the menu
Close All(Was Cancel: Boolean)CallableUMG widgetClose the entire stack at once.

+ 2 more Menu nodes β€” full node reference

NamedOptionWidget 6
NodeTypeAvailable onDescription
Add Named Option(Name: Name, Option: Text) β†’ intCallableOption Widget Base@brief Adds a new named option
Set Named Options(New Options: Map Name β†’ Text, New Selected Name: Name)CallableOption Widget Base@brief Sets all of the named options available for this control
Get Selected Name() β†’ NamePureOption Widget Base
Get Index For Name(Name: Name) β†’ intCallableOption Widget BaseGet the index in this option list corresponding to a name
Get Name For Index(Index: int) β†’ NameCallableOption Widget BaseGet the name in this option list corresponding to an index

+ 1 more NamedOptionWidget nodes β€” full node reference

OptionWidget 11
NodeTypeAvailable onDescription
Clear Options() β†’ /// Remove all options voidCallableUMG widget
Add Option(Option: Text) β†’ intCallableUMG widget@brief Adds a new option
Set Options(Options: Array of Text, New Selected Index: int)CallableUMG widget@brief Sets all of the options available for this control
Get Selected Index() β†’ intPureUMG widget
Get Selected Option() β†’ TextPureUMG widget
Set Selected Index(New Index: int)CallableUMG widget@brief Change the selected index option
Set Mouse ModeCallableUMG widget
Set Button ModeCallableUMG widget
Update From Input Mode(Mode: Input Mode)CallableUMG widget

+ 2 more OptionWidget nodes β€” full node reference

Progress 2
NodeTypeAvailable onDescription
Set Percent Smoothly(In Percent: Float)CallableProgress BarChanges the bar percentage smoothly from its current value. Automatically interrupts any existing smooth change.
Stop Smooth Percent ChangeCallableProgress BarStop any pending smooth changes to percent Call this if you need to interrupt any current smooth change and
TabButton 6
NodeTypeAvailable onDescription
Set Tab Selected(Selected: Boolean)CallableUMG widget
Notify Tab SelectedCallableUMG widget
Register Tab(Tab ID: Name, Button Widget Type: Tab Button, Label: Text, Content Widget: Widget) β†’ BooleanCallableUMG widgetRegisters tab content with this tab widget
Set Target Widget Switcher(Widget Switcher: Widget Switcher)CallableUMG widgetAssign a widget switcher to be driven by this tab selection.
Increment Tab Index(Amount: int)CallableUMG widget

+ 1 more TabButton nodes β€” full node reference

Events & delegates

Bind these in Blueprint (drag off the subsystem or component β†’ Bind Event) or with AddDynamic in C++.

TypewriterTextWidget UMG widget 4
EventParametersWhen it fires
On Typewriter Line FinishedWidget (Typewriter Text Widget)Event called when a line has finished playing, whether on its own or when skipped to end
On Typewriter Letter AddedWidget (Typewriter Text Widget), Char (String)Event called when one or more new letters have been displayed
On Typewriter Start WordWidget (Typewriter Text Widget), Word (String)Event called when a new word has started
On Typewriter Run Name ChangedWidget (Typewriter Text Widget), New Run Name (String)Event called when the "run name" of the text changes aka the rich text style markup. Also called when reverts to default.
BeltGameSubsystem Subsystem 7
EventParametersWhen it fires
On Input Mode ChangedPlayer Index (int), Input Mode (Input Mode)Event raised when main input mode changed between gamepad and keyboard / mouse (for any of axis / button events)
On Button Input Mode ChangedPlayer Index (int), Input Mode (Input Mode)Event raised when the last button input changed between gamepad / keyboard / mouse This can happen at a different time to OnInputModeChanged, e.g.
On Axis Input Mode ChangedPlayer Index (int), Input Mode (Input Mode)Event raised when the last axis input changed between gamepad / keyboard / mouse This can happen at a different time to OnInputModeChanged, e.g.
On Enhanced Input Mappings Changedβ€”DEPRECATED: Event raised just after the Enhanced Input mappings have changed User-triggered via NotifyEnhancedInputMappingsChanged
On Enhanced Input Action TriggeredAction (Input Action), Triggered Event (Trigger Event)Event fired when an enhanced input event that an interest has previously been registered in triggers.
On Window Foreground ChangedFocussed (Boolean)Event raised when the game window's foreground status changes
On Viewport ResizedX Size (int), Y Size (int)Event raised when the viewport changes size
BeltLightFlickerComponent Component 1
EventParametersWhen it fires
On Light Flicker UpdateLight Value (Float)
FocusableButton Button 2
EventParametersWhen it fires
On Focus Receivedβ€”
On Focus Lostβ€”
FocusableCheckBox Check Box 2
EventParametersWhen it fires
On Hoveredβ€”
On Unhoveredβ€”
MenuBase Focusable Panel 2
EventParametersWhen it fires
On ClosedMenu (Menu Base), Was Cancelled (Boolean)Raised just as the menu is closing
After ClosedMenu (Menu Base), Was Cancelled (Boolean)Raised just after the menu has closed
OptionWidgetBase UMG widget 1
EventParametersWhen it fires
On Selected Option ChangedWidget (Option Widget Base), New Index (int)Event raised when the selected option changes
TabButton UMG widget 1
EventParametersWhen it fires
On Tab SelectedTab Index (int)
TabListWidget UMG widget 1
EventParametersWhen it fires
On Content Widget ChangedPrevious Content Widget (Widget), New Content Widget (Widget)Event called when tab content has changed

Options & enums

EnumValues
Belt Ease FunctionLinear Ease In Sine Ease Out Sine Ease In Out Sine Ease In Quad Ease Out Quad Ease In Out Quad Ease In Cubic Ease Out Cubic Ease In Out Cubic Ease In Quart Ease Out Quart Ease In Out Quart Ease In Quint Ease Out Quint Ease In Out Quint Ease In Expo Ease Out Expo Ease In Out Expo Ease In Circ Ease Out Circ Ease In Out Circ Ease In Back Ease Out Back
Input ModeMouse Keyboard Gamepad Unknown
Input Mode ChangeNo Change Restore To Previous UI Only Game And UI Game Only
Mouse Pointer Visibility ChangeNo Change Restore To Previous Pointer Visible
Game Pause ChangeNo Change Restore To Previous Pause Game Unpause Game
Input Binding TypeAction Axis Key Enhanced Input Action
Input Image Device PreferenceAuto Gamepad, Keyboard, Mouse Gamepad, Mouse, Keyboard Gamepad, Most Recent Button Keyboard/Mouse Gamepad, Most Recent Axis Keyboard/Mouse
Belt Light Flicker PatternFlicker 1 Flicker 2 Slow Strong Pulse Candle 1 Candle 2 Candle 3 Fast Strobe Slow Strobe Gentle Pulse 1 Flourescent Flicker Slow Pulse No Black Torch 1 Torch 2 Custom

Compatibility

UE 5.8UtilityBelt 5.8.zip

One ready-made build per engine version is included in the download β€” copy the one that matches your project.

PlatformSupported in
WindowsEditor & packaged
LinuxEditor & packaged
macOSEditor & packaged
ModuleTypeLoading phase
UtilityBeltRuntimePreDefault
UtilityBeltTypewriterRuntimePreDefault
UtilityBeltEditorEditorPostDefault

Technical details

Code modulesUtilityBelt (Runtime), UtilityBeltTypewriter (Runtime), UtilityBeltEditor (Editor)
Blueprints0 Β· C++ classes: 34
Network replicatedYes
Development platformsWindows: Yes, Mac: Not verified
Target build platformsWin64, Linux, Mac (Win64 verified)
Third-party softwareYes
Engine versionsUnreal Engine 5.8 β€” a build for each is included
C++ classes35 + 15 structs
Blueprint nodes119
Events21
DocumentationDocumentation.html (in the download)
DownloadUtilityBelt.zip Β· 240 KB
Versionv1.0.0

Third-party components

  • Rich text dialogue box code for the typewriter text widget (Source/ThirdParty/UtilityBeltTypewriter, module UtilityBeltTypewriter), Copyright (c) 2021 Sam Bloomberg, MIT License
  • Geometric Tools sphere/cone intersection routine (Source/ThirdParty/GeometricTools), Copyright (c) 1998-2021 David Eberly, Geometric Tools, Boost Software License 1.0
  • distribute-lib low-discrepancy sequence algorithms (Source/ThirdParty/DistributeLib), Author: Andrew Willmott, Unlicense (public domain)

These components are shipped as source code, compiled into the plugin's modules and send no data to their authors. The full attributions accompany the Third Party Software declaration submitted to Epic.

What's in the download

FileWhat it is
UtilityBelt 5.8.zipPlugin build for Unreal Engine 5.8
Documentation.htmlDocumentation (open in a browser)

Quick start

  1. Unzip the download and pick the build that matches your engine (5.8).
  2. Copy the UtilityBelt folder into your project's Plugins/ folder (create it if needed).
  3. Open the project, enable UtilityBelt under Edit β€Ί Plugins and restart the editor.
  4. Right-click in any Blueprint graph and search Typewriter β€” or include the public headers from C++.
  5. Package for your target platform (Windows, Linux, macOS).

Good to know

Built and verified warning-free for Unreal Engine 5.8. Requires the engine's Enhanced Input and Paper2D plugins (enabled automatically); input prompt images need a UI theme data asset with key-to-sprite Data Tables, which you create in your project. Network replication applies to the light flicker component and the replicated physics actor. Developed and maintained by Alpha XP.

Everything included

  • Per-player input-method detection (mouse, keyboard, gamepad) with change events
  • Focusable Button, Check Box, Slider, User Widget and Panel with focus styling and…
  • Menu stack with back/close keys, automatic focus, input-mode, pause and cursor handling
  • Input Image widget and rich-text <input/> tag that show the active device's binding
  • Typewriter rich-text widget with pre-calculated line breaks and letter/word events
  • Option selector, named options, tab list and smoothly changing progress bar widgets
  • Actor pooling world subsystem with optional activation interface
  • Light flicker component with built-in and custom patterns (replicated)
  • Spring arm with smooth collision avoidance and smooth offset changes
  • Easing functions, 2D/convex geometry helpers, Halton random streams and shuffle bags
  • Editor visualisation component and a single-table data-table row picker
  • Project setting to hide the mouse automatically while a gamepad is used

Platforms

WindowsmacOSLinux

Requirements

  • Unreal Engine 5.8
  • Develop on Windows (Win64)
  • Blueprints and C++

In the download

FileUtilityBelt.zip
FormatZIP
Size240 KB
Versionv1.0.0
Licence fileIncluded in the archive
SHA-2562841dd5c0ce1dc98…

Personal

$11.99

One non-commercial project

  • 1 activation seat
  • 1 year of updates
  • One end product
  • Non-commercial use
  • Community support
  • 14-day refund window
Read the Personal terms
β˜… Most popular

Commercial

$59.99

Ship paid products

  • 5 activation seats
  • 1 year of updates
  • One paid end product
  • Unlimited end users
  • Priority support
  • Source files
  • 14-day refund window
Read the Commercial terms

Extended

$189.00

Resell & white-label

  • Unlimited activation seats
  • Lifetime updates
  • Unlimited end products
  • White-label & resell
  • 1-hour SLA
  • Seat-free team use
  • 14-day refund window
Read the Extended terms

One purchase per product, no subscription. Each licence comes with a signed key β€” 1 seat on Personal, 5 seats on Commercial, unlimited seats on Extended. Paid licences can be refunded within 14 days from your order page.

  1. v1.0.0Latest
    • Unreal Engine 5.8
    • Blueprint and C++ API, HTML documentation
β€”
β˜…β˜…β˜…β˜…β˜…
No reviews yet
5β˜…0%
4β˜…0%
3β˜…0%
2β˜…0%
1β˜…0%

Be the first to review UtilityBelt β€” reviews come from customers who bought it, so every one is a verified purchase.

Reviews are for customers who bought UtilityBelt.
Email supportsupport@alphaxp.net β€” include your order reference.
What support coversInstallation help, download or activation problems, and questions about documented behaviour, for your licence term.
Keys & downloadsLost a key or a download link? Everything you bought is in My library.
Refunds & terms14-day refunds from your order page. Refund policy Β· Personal terms Β· Commercial terms Β· Extended terms

Frequently asked

How do I get the files after paying?

Straight after checkout you land on your order page with the download button and your licence key. A receipt is emailed to you, and every order stays in My library.

Which licence do I need?

Personal β€” One non-commercial project. Commercial β€” Ship paid products. Extended β€” Resell & white-label. The Licences tab compares them side by side.

On how many devices can I activate it?

1 seat on Personal, 5 seats on Commercial, unlimited seats on Extended.

How long do I get updates?

Personal: 1 year of updates, Commercial: 1 year of updates, Extended: lifetime updates, counted from your purchase.

Can I get a refund?

Yes β€” paid licences can be refunded within 14 days, straight from your order page.

Is the download safe?

The file was scanned with ClamAV when it was published. Its SHA-256 checksum is listed under Features β†’ In the download, so you can verify the file you receive.

Do I need an account?

No. Checkout only needs your email. Signing in keeps all your purchases, keys and downloads together in My library.

More like this

From the same studio
$11.99Personal licence Β· UtilityBelt
✦ Why TechHarbour

Software you own, from the people who built it.

117 products, one studio. Each ships with a signed licence key, an instant download and 14-day refunds β€” and every file is malware-scanned before it goes on sale.