August 20, 2020



One of the most basic things that you can do in a PC game (Windows, Mac, Linux) is move your cursor. Using custom cursors in games is one of the easiest ways to give nuanced feedback to players about the thing they are pointing at.


Want to show that something can be grabbed? Make a hand grab cursor. Want to show that something can be opened? Make an unlock cursor. You get the picture. However, when it comes time to add these to your Unreal Engine 4 game, the path can be a bit bumpy.

Problem I: Limited Access to Hardware Cursors in Blueprints

Unreal Engine 4 has its roots in first-person shooter games, and that influence shows in which feature sets are fleshed out and which are a bit lackluster. Hardware cursor access is one of those "less than complete" sections.

As of 4.25, Unreal Engine 4 allows you to override the standard operating system cursors (text beam, arrow, grab, etc.) through Blueprints, but it hides a special Custom option which allows you to override your own custom cursors. This means that you are limited to overriding 13 cursors in Blueprint. This is also a problem because you may want to use the standard cursors at some point.

Problem II: Inadequate Software Cursors

Unreal Engine 4 also allows you to overlay software cursors, which are basically Widgets, in place of hardware cursors. Here, again, Unreal Engine 4 shows its FPS roots. In an FPS, the cursor is fixed to the center of the screen and moves very little, if at all, and so software cursors are sufficient. But in other genres like MOBAs or top-down RPGs, your cursor needs to be hyper-responsive, and software cursors lag under these circumstances.

The Solution: Cursory

Cursory solves these problems in three ways.

First, Cursory allows you to define, tag, and load an arbitrary (read: infinite) number of hardware cursors in the Editor. These definitions do not override standard cursors but instead supplement them.

Second, Cursory allows you to swap between standard and custom cursors at runtime, through Blueprints, from anywhere: player controllers, widgets, actors, levels, etc.

Third, Cursory gives you the ability to use limited scope cursors without disturbing the base cursor. For example, you can show an attack cursor when hovering over a monster, and then easily switch back to a neutral cursor once you stop hovering.

Together, this functionality makes using hardware cursors a pleasant and enjoyable experience.

© 2021 Mustafa Moiz.