UtilityBelt
Input-method detection, gamepad-friendly focusable widgets and menus, live input prompts, typewriter text, easing, pooling and more for Blueprints and C++.
Highlights
All 12 features β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.
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:
| Class | Type | Nodes | Use it for |
|---|---|---|---|
| BeltBPL | Function library | 17 | Blueprint library exposing various things in a Blueprint-friendly way e.g. |
| TypewriterTextWidget | UMG widget | 11 | Add to a widget blueprint or viewport. |
| OptionWidgetBase | UMG widget | 11 | Add to a widget blueprint or viewport. |
| BeltGameSubsystem | Game Instance subsystem | 9 | Entry point for all the top-level features of the helper system |
| BeltPooledActorSystem | World subsystem | 7 | General actor pooling system |
| BeltIndexShuffleBag | Function library | 7 | A shufflebag is an array that contains a certain number of items, and can randomly withdraw one at a time until there are none left. |
| InputImage | Image | 7 | A special widget containing an image which populates itself based on an input action / axis and can dynamically change based on the active input method. |
| MenuStack | UMG widget | 7 | Represents 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. |
| BeltEasings | Function library | 6 | Static nodes β callable from anywhere, no object needed. |
| NamedOptionWidgetBase | Option Widget Base | 6 | Subclass of UOptionWidget base to provide convenient access via FNames, on top of the regular integers. |
| + 10 more classes | Function libraries & objects | 31 | Grouped by feature in the node tables below. |
Callable runs when executed Β· Pure no exec pin, returns a value
Typewriter 11
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Text(In Text: Text) | Callable | UMG widget | |
| Get Text() β Text | Callable | UMG widget | |
| Play Line(In Line: Text, Speed: Float) | Callable | UMG widget | Play 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 Line | Callable | UMG widget | |
| Has Finished Playing Line() β Boolean | Callable | UMG widget | Return whether the entire line has finished playing |
| Has More Line Parts() β Boolean | Callable | UMG widget | Returns whether the number of lines exceeded MaxNumberOfLines and there are still parts to play. |
| Play Next Line Part(Speed: Float) | Callable | UMG widget | If HasMoreLineParts() is true, play the next part of the line originally requested by PlayLine |
| Skip To Line End | Callable | UMG widget | |
| Get Play Speed() β Float | Callable | UMG widget | Get typewriter play speed |
+ 2 more Typewriter nodes β full node reference
Math 3
| Node | Type | Available on | Description |
|---|---|---|---|
| Sphere Overlap Cone(Cone Origin: Vector, Cone Dir: Vector, Cone Angle: Float, Distance: Float, Sphere Centre: Vector, β¦) β Boolean | Callable | Static | Return whether a sphere overlaps a cone |
| Heading Angle 2 D(Dir: Vector 2D) β Float | Pure | Static | Equivalent to FVector::HeadingAngle but for FVector2D |
| Angle Between 2 D(Dir A: Vector 2D, Dir B: Vector 2D) β Float | Pure | Static | Find the angle between two 2D vectors |
UI 3
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Widget Focus(Widget: Widget) | Callable | Static | Set 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 Slot | Callable | Static | Insert 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) β Widget | Callable | Static | Utility 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
| Node | Type | Available on | Description |
|---|---|---|---|
| Make Balanced Random Stream(Seed: Integer64) β Belt Balanced Random Stream | Pure | Static | |
| Balanced Random() β Float, Stream | Callable | Static | |
| Balanced Random 2 D() β Vector 2D, Stream | Callable | Static | |
| Balanced Random 3 D() β Vector, Stream | Callable | Static | |
| Balanced Random Vector() β Vector, Stream | Callable | Static |
+ 1 more Random nodes β full node reference
Streaming 2
| Node | Type | Available on | Description |
|---|---|---|---|
| Add View Origin To Streaming(View Origin: Vector, Screen Width: Float, FOV: Float, Boost Factor: Float, Override Location: Boolean, β¦) | Callable | Static | Let 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) | Callable | Static | Force content streaming to update. Useful if you need things to stream in sooner than usual. |
Colour 2
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Perceived Luminance(In Colour: Linear Color) β Float | Callable | Static | Calculate the perceived luminance of a colour using ITU BT.709 standard |
| Get Perceived Luminance 2(In Colour: Linear Color) β Float | Callable | Static | Calculate the perceived luminance of a colour using ITU BT.601 standard (more R & B) |
Project 1
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Project Version() β String | Pure | Static |
DynamicNavMesh 2
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Location And Dimensions(Location: Vector, New Dimensions: Vector) | Callable | Nav Mesh Bounds Volume | |
| Set Dimensions(New Dimensions: Vector) | Callable | Nav Mesh Bounds Volume |
BeltEaseMath 6
| Node | Type | Available on | Description |
|---|---|---|---|
| Ease Alpha(In Alpha: Float, Func: Belt Ease Function) β Float | Callable | Static | Convert 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) β Float | Callable | Static | Interpolate with easing function support |
| Ease Vector(A: Vector, B: Vector, Alpha: Float, Func: Belt Ease Function) β Vector | Callable | Static | Interpolate with easing function support |
| Ease Rotator(A: Rotator, B: Rotator, Alpha: Float, Func: Belt Ease Function, Shortest: Boolean) β Rotator | Callable | Static | Interpolate with easing function support |
| Ease Quat(A: Quat, B: Quat, Alpha: Float, Func: Belt Ease Function) β Quat | Callable | Static | Interpolate with easing function support |
+ 1 more BeltEaseMath nodes β full node reference
BeltGameSubsystem 9
| Node | Type | Available on | Description |
|---|---|---|---|
| Get Last Input Mode Used(Player Index: int) β Input Mode | Callable | Subsystem | Gets the device where the most recent input event of any kind happened |
| Get Last Input Button Pressed(Player Index: int) β Input Mode | Callable | Subsystem | Gets the device where the most recent button press happened |
| Get Last Input Axis Moved(Player Index: int) β Input Mode | Callable | Subsystem | Gets the device where the most recent axis move happened |
| Last Input Was Game Pad(Player Index: int) β Boolean | Callable | Subsystem | |
| 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 Sprite | Callable | Subsystem | @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 Changed | Callable | Subsystem | DEPRECATED - 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) | Callable | Subsystem | Register 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
| Node | Type | Available on | Description |
|---|---|---|---|
| Evaluate Light Curve(Curve Type: Belt Light Flicker Pattern, Time: Float) β Float | Pure | Static | Directly evaluate a lighting curve. Alternatively, see ULightingCurveComponent. |
Light Flicker 5
| Node | Type | Available on | Description |
|---|---|---|---|
| Play(Reset Time: Boolean) | Callable | Component | |
| Pause | Callable | Component | |
| Get Current Value() β Float | Pure | Component | |
| Set Flicker Pattern(Pattern: Belt Light Flicker Pattern, Custom Pattern String: String) | Callable | Component | Change the flicker pattern dynamically |
+ 1 more Light Flicker nodes β full node reference
Pooling 7
| Node | Type | Available on | Description |
|---|---|---|---|
| Get() β Belt Pooled Actor System | Callable | Subsystem | |
| Add Actor To Pool(Actor: Actor) | Callable | Subsystem | Add 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) | Callable | Subsystem | Release 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 Used | Callable | Subsystem | Re-use or spawn an actor of a given class. |
| Pre Warm Actor Pool(Actor Class: Actor, Count: int) | Callable | Subsystem | Pre-warm the actor pool by creating a number of instances and making them invisible |
| Drain Actor Pool(Actor Class: Actor, Number To Keep: int) | Callable | Subsystem | Drain the actor pool for a single class of actor, destroying any surplus actors. |
+ 1 more Pooling nodes β full node reference
Shuffle Bag 7
| Node | Type | Available on | Description |
|---|---|---|---|
| Reinitialise(Count: int, Seed: Integer) | Callable | Object | Reinitialise the shuffle bag with a new size / seed. |
| Make Index Shuffle Bag(Outer: Object, Count: int, Seed: Integer) β Belt Index Shuffle Bag | Callable | Static | Create a new shuffle bag of indexes for accessing items in an array |
| Get Num Remaining() β int | Pure | Object | Get the number of items left in the bag |
| Get Num Pulled() β int | Pure | Object | Get the number of items which have already been pulled from the bag |
| Get Num Total() β int | Pure | Object | Get the number of items both remaining in the bag and which have already been pulled from it |
| Reset | Callable | Object | Reset the bag, returning all previously retrieved contents to the bag |
+ 1 more Shuffle Bag nodes β full node reference
SpringArm 5
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Target Offset Smooth(New Target Offset: Vector, Speed: Float) | Callable | Spring Arm Component | Smoothly change the target offset, instead of jumping |
| Cancel Target Offset Smooth | Callable | Spring Arm Component | Interrupt a smooth target offset change, freeze where we are |
| Set Socket Offset Smooth(New Socket Offset: Vector, Speed: Float) | Callable | Spring Arm Component | Smoothly change the socket offset, instead of jumping |
| Cancel Socket Offset Smooth | Callable | Spring Arm Component | Interrupt a smooth socket offset change, freeze where we are |
+ 1 more SpringArm nodes β full node reference
Focus 6
| Node | Type | Available on | Description |
|---|---|---|---|
| Simulate Press | Callable | Button | Simulate a button press |
| Simulate Release | Callable | Button | Simulate a button release |
| Set Focus To Initial Widget() β Boolean | Callable | UMG widget | @brief Set the current focus to the initial focus widget |
| Set Initial Focus Widget(New Initial Focus: Widget) | Callable | UMG widget | @brief Set the desired initial focus widget. Call to set the initial widget dynamically without overriding GetInitialFocusWidget |
| Restore Previous Focus() β Boolean | Callable | UMG widget | @brief Try to restore focus to the previously focussed child |
+ 1 more Focus nodes β full node reference
InputImage 7
| Node | Type | Available on | Description |
|---|---|---|---|
| Set From Action(Name: Name) | Callable | Image | Tell this image to display the bound action for the current input method |
| Set From Axis(Name: Name) | Callable | Image | Tell this image to display the bound axis for the current input method |
| Set From Key(K: Key) | Callable | Image | Tell this image to display a specific key image |
| Set From Input Action(Action: Input Action) | Callable | Image | Tell this image to display Enhanced InputAction |
| Get Binding Type() β Input Binding Type | Callable | Image | Get the binding type that we'll use to populate the image |
| Get Action Or Axis Name() β Name | Callable | Image | If 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
| Node | Type | Available on | Description |
|---|---|---|---|
| Open(Is Regained Focus: Boolean) | Callable | Focusable 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) β Boolean | Callable | Focusable Panel | @brief Request this menu to close. The menu can veto this request. |
| Close(Was Cancel: Boolean) | Callable | Focusable 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() β Boolean | Callable | Focusable Panel | Return 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 Base | Callable | UMG widget | Push 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) | Callable | UMG widget | Push a new menu level by instance on to the stack. |
| Pop Menu(Was Cancel: Boolean) | Callable | UMG widget | Pop the top level of the menu stack. This *destroys* the top level menu, meaning it will lose all of its state. |
| Count() β int | Callable | UMG widget | Get the number of active levels in the menu |
| Close All(Was Cancel: Boolean) | Callable | UMG widget | Close the entire stack at once. |
+ 2 more Menu nodes β full node reference
NamedOptionWidget 6
| Node | Type | Available on | Description |
|---|---|---|---|
| Add Named Option(Name: Name, Option: Text) β int | Callable | Option Widget Base | @brief Adds a new named option |
| Set Named Options(New Options: Map Name β Text, New Selected Name: Name) | Callable | Option Widget Base | @brief Sets all of the named options available for this control |
| Get Selected Name() β Name | Pure | Option Widget Base | |
| Get Index For Name(Name: Name) β int | Callable | Option Widget Base | Get the index in this option list corresponding to a name |
| Get Name For Index(Index: int) β Name | Callable | Option Widget Base | Get the name in this option list corresponding to an index |
+ 1 more NamedOptionWidget nodes β full node reference
OptionWidget 11
| Node | Type | Available on | Description |
|---|---|---|---|
| Clear Options() β /// Remove all options void | Callable | UMG widget | |
| Add Option(Option: Text) β int | Callable | UMG widget | @brief Adds a new option |
| Set Options(Options: Array of Text, New Selected Index: int) | Callable | UMG widget | @brief Sets all of the options available for this control |
| Get Selected Index() β int | Pure | UMG widget | |
| Get Selected Option() β Text | Pure | UMG widget | |
| Set Selected Index(New Index: int) | Callable | UMG widget | @brief Change the selected index option |
| Set Mouse Mode | Callable | UMG widget | |
| Set Button Mode | Callable | UMG widget | |
| Update From Input Mode(Mode: Input Mode) | Callable | UMG widget |
+ 2 more OptionWidget nodes β full node reference
Progress 2
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Percent Smoothly(In Percent: Float) | Callable | Progress Bar | Changes the bar percentage smoothly from its current value. Automatically interrupts any existing smooth change. |
| Stop Smooth Percent Change | Callable | Progress Bar | Stop any pending smooth changes to percent Call this if you need to interrupt any current smooth change and |
TabButton 6
| Node | Type | Available on | Description |
|---|---|---|---|
| Set Tab Selected(Selected: Boolean) | Callable | UMG widget | |
| Notify Tab Selected | Callable | UMG widget | |
| Register Tab(Tab ID: Name, Button Widget Type: Tab Button, Label: Text, Content Widget: Widget) β Boolean | Callable | UMG widget | Registers tab content with this tab widget |
| Set Target Widget Switcher(Widget Switcher: Widget Switcher) | Callable | UMG widget | Assign a widget switcher to be driven by this tab selection. |
| Increment Tab Index(Amount: int) | Callable | UMG 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
| Event | Parameters | When it fires |
|---|---|---|
| On Typewriter Line Finished | Widget (Typewriter Text Widget) | Event called when a line has finished playing, whether on its own or when skipped to end |
| On Typewriter Letter Added | Widget (Typewriter Text Widget), Char (String) | Event called when one or more new letters have been displayed |
| On Typewriter Start Word | Widget (Typewriter Text Widget), Word (String) | Event called when a new word has started |
| On Typewriter Run Name Changed | Widget (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
| Event | Parameters | When it fires |
|---|---|---|
| On Input Mode Changed | Player 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 Changed | Player 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 Changed | Player 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 Triggered | Action (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 Changed | Focussed (Boolean) | Event raised when the game window's foreground status changes |
| On Viewport Resized | X Size (int), Y Size (int) | Event raised when the viewport changes size |
BeltLightFlickerComponent Component 1
| Event | Parameters | When it fires |
|---|---|---|
| On Light Flicker Update | Light Value (Float) |
FocusableButton Button 2
| Event | Parameters | When it fires |
|---|---|---|
| On Focus Received | β | |
| On Focus Lost | β |
FocusableCheckBox Check Box 2
| Event | Parameters | When it fires |
|---|---|---|
| On Hovered | β | |
| On Unhovered | β |
MenuBase Focusable Panel 2
| Event | Parameters | When it fires |
|---|---|---|
| On Closed | Menu (Menu Base), Was Cancelled (Boolean) | Raised just as the menu is closing |
| After Closed | Menu (Menu Base), Was Cancelled (Boolean) | Raised just after the menu has closed |
OptionWidgetBase UMG widget 1
| Event | Parameters | When it fires |
|---|---|---|
| On Selected Option Changed | Widget (Option Widget Base), New Index (int) | Event raised when the selected option changes |
TabButton UMG widget 1
| Event | Parameters | When it fires |
|---|---|---|
| On Tab Selected | Tab Index (int) |
TabListWidget UMG widget 1
| Event | Parameters | When it fires |
|---|---|---|
| On Content Widget Changed | Previous Content Widget (Widget), New Content Widget (Widget) | Event called when tab content has changed |
Options & enums
| Enum | Values |
|---|---|
| Belt Ease Function | Linear 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 Mode | Mouse Keyboard Gamepad Unknown |
| Input Mode Change | No Change Restore To Previous UI Only Game And UI Game Only |
| Mouse Pointer Visibility Change | No Change Restore To Previous Pointer Visible |
| Game Pause Change | No Change Restore To Previous Pause Game Unpause Game |
| Input Binding Type | Action Axis Key Enhanced Input Action |
| Input Image Device Preference | Auto Gamepad, Keyboard, Mouse Gamepad, Mouse, Keyboard Gamepad, Most Recent Button Keyboard/Mouse Gamepad, Most Recent Axis Keyboard/Mouse |
| Belt Light Flicker Pattern | Flicker 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
One ready-made build per engine version is included in the download β copy the one that matches your project.
| Platform | Supported in |
|---|---|
| Windows | Editor & packaged |
| Linux | Editor & packaged |
| macOS | Editor & packaged |
| Module | Type | Loading phase |
|---|---|---|
| UtilityBelt | Runtime | PreDefault |
| UtilityBeltTypewriter | Runtime | PreDefault |
| UtilityBeltEditor | Editor | PostDefault |
Technical details
| Code modules | UtilityBelt (Runtime), UtilityBeltTypewriter (Runtime), UtilityBeltEditor (Editor) |
|---|---|
| Blueprints | 0 Β· C++ classes: 34 |
| Network replicated | Yes |
| Development platforms | Windows: Yes, Mac: Not verified |
| Target build platforms | Win64, Linux, Mac (Win64 verified) |
| Third-party software | Yes |
| Engine versions | Unreal Engine 5.8 β a build for each is included |
| C++ classes | 35 + 15 structs |
| Blueprint nodes | 119 |
| Events | 21 |
| Documentation | Documentation.html (in the download) |
| Download | UtilityBelt.zip Β· 240 KB |
| Version | v1.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
| File | What it is |
|---|---|
| UtilityBelt 5.8.zip | Plugin build for Unreal Engine 5.8 |
| Documentation.html | Documentation (open in a browser) |
Quick start
- Unzip the download and pick the build that matches your engine (5.8).
- Copy the UtilityBelt folder into your project's Plugins/ folder (create it if needed).
- Open the project, enable UtilityBelt under Edit βΊ Plugins and restart the editor.
- Right-click in any Blueprint graph and search Typewriter β or include the public headers from C++.
- 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
Requirements
- Unreal Engine 5.8
- Develop on Windows (Win64)
- Blueprints and C++
In the download
Personal
One non-commercial project
- 1 activation seat
- 1 year of updates
- One end product
- Non-commercial use
- Community support
- 14-day refund window
Commercial
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
Extended
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
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.
- v1.0.0Latest
- Unreal Engine 5.8
- Blueprint and C++ API, HTML documentation
Be the first to review UtilityBelt β reviews come from customers who bought it, so every one is a verified purchase.
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
AudioLens
Real-time audio analysis: FFT spectrum, onset and beat detection, and a full set of time- and frequency-domain descriptors..
β β β β β No reviews yetTTechHarbour$14.00BlueprintTCP
BlueprintTCP lets you connect to any TCP server and exchange data entirely from Blueprints β no C++ and no networking boilerplate.
β β β β β No reviews yetTTechHarbour$12.99BluetoothLink
Bluetooth Low Energy for Unreal - scan, connect, read, write and subscribe to BLE devices on Android and iOS.
β β β β β No reviews yetTTechHarbour$11.99ClusterLink
SocketCluster realtime client for Unreal - pub/sub channels, auth engine and JSON codec, usable from Blueprints.
β β β β β No reviews yetTTechHarbour$11.99