The Struggle of the Directional Marker


During this week of development, one of my main tasks was to implement a dynamic objective marker, a waypoint arrow that would point players toward the delivery objective in our game Same Day Delivery. At first glance, this seemed like a relatively straightforward feature, but it turned into a far more complex and frustrating challenge due to the lack of clear documentation and conflicting implementation methods across forums and tutorials.

The biggest issue was finding a solution that worked specifically for our game’s fast-paced, UI-driven structure. Most resources I found either relied heavily on Blueprints, didn’t account for screen clamping, or were outdated for Unreal Engine 5. I needed the arrow to fade based on proximity, clamp to the edges of the screen, rotate toward the objective, and hide/show dynamically during gameplay. The lack of a robust starting point made it extremely difficult to even get the arrow to appear correctly—let alone behave properly. This problem directly affected the user experience, as players wouldn’t be able to intuitively find their objective without the marker working reliably.

To address the issue, I started by experimenting with multiple UI approaches. I initially followed tutorials using simple ProjectWorldToScreen logic, but these didn’t work well when the objective was behind the player or off-screen. The arrow would either disappear, teleport oddly, or stay fixed in the center of the screen no matter the actual target location. I also ran into problems where the delivery point reference wasn’t set correctly, which caused the waypoint to do nothing at all.

Eventually, I implemented a fully custom UUserWidget class in C++ that updates every frame in NativeTick. This allowed me to access the player and target positions, convert world direction into screen space manually, and clamp the arrow to the viewport edges while keeping the rotation accurate. I also added a fading function based on distance and ensured the widget was only shown when a delivery is active. The biggest breakthrough came when I realized the widget’s visibility and actor references had to be managed carefully—created only once and updated dynamically, not redundantly through both the HUD and GameMode.

Now, the directional marker smoothly rotates around the screen edge, fades when the player is nearby, and fully disappears when inactive—enhancing the clarity and overall gameplay experience for the player. While it took more debugging and design consideration than I anticipated, I’ve ended up with a reusable, polished system that works great for our project and will likely benefit future ones as well.

Get Same Day Delivery

Leave a comment

Log in with itch.io to leave a comment.