Introduction I have an old 15" MacBook Pro from late 2013. Physically, it’s perfectly fine and still a very nice machine. But Apple has decided to abandon it to e-waste; the latest macOS that will run on it is Big Sur, which hasn’t had an update in years, and increasingly software will just not run on it. Visual Studio Code will even auto-update itself to a version that won’t launch anymore if you let it.

Read more →

The Problem Our game Minermancers involves a handful of silly wizards going mining together. They dig through rock to get to minerals, and that has its own challenges for navmesh updates, but until recently the standard UE navmesh facilities worked fine. However, a tricky problem I had recently is: what if I want NPCs to dig through rock to get to where they need to go, if there isn’t a good open path already?

Read more →

In-Game Map: The Requirements I wanted to make an in-game map screen. My requirements were: Generated from world geometry My levels are procedural and modifiable so I couldn’t just manually draw it once Stylistic I wanted it to look a bit like an old-skool TTRPG map, not just an overhead game render Here’s the final result, which is basically what I was looking for: You can see that the map looks hugely different from the in-game render (you don’t usually play the game from that camera angle, I’ve just moved it to roughly match for comparison).

Read more →

There are 2 types of font in Unreal - regular runtime fonts, and “offline” distance field fonts. The former is what you’ll use for UI widgets and such, but for in-world Text Render Components you need Distance Field Fonts. The engine only comes with one, “RobotoDistanceField”, and there isn’t very much information online on how to create new ones. I’ve figured it out so I thought I’d post it here for both me in future, and everyone else.

Read more →

A quick one today to hopefully help someone else who is scratching their head about very weird LastRenderTime results in UE 5.5! TL;DR In Unreal 5.5 if you disable Occlusion Queries, LastRenderTime on most Primitive Components will not be updated correctly. This will cause Skeletal Animations not to play even though a skeletal mesh is definitely within the camera frustum, and any other effects that rely on LastRenderTime will be erratic.

Read more →

The Problem Disclaimer: I am not a netcode specialist, in Unreal Engine or otherwise. I’m just going to tell you how I solved a gnarly problem I had, and why I think it happened. I may well be wrong about any of this, so I welcome all feedback about any nuances or specifics I might have missed or misunderstood, you can find me at Mastodon (preferable) and Bluesky. We’re working on a multiplayer game in UE5, and last week something weird started happening.

Read more →

Unreal has some exising documentation on Agent Navigation Avoidance, which works fine if you only want your agents to avoid each other. What if you have friendly / neutral agents that should avoid bumping into the player? There’s basically no documentation on this, and all the advice I could find on the forums was either incorrect or incomplete as of UE 5.4+. So here’s how you actually do it. Agent Setup We’re going to use Detour Crowd Avoidance, not RVO avoidance.

Read more →

What’s The Problem? Sometimes you want to do some calculations based on the current view, such as a ray/plane intersection to figure out where the player is looking. A lot of information online will immediately tell you to “get the camera component and…”. ⛔ NO! ⛔ If you do this you’ll get some weird edge cases where the results that gives you are just plain wrong. The transform of the camera component on your pawn is NOT the current player view; even when it’s the camera you’re posessing right now.

Read more →

The Requirement Niagara is great for simulated particle systems, but its renderers seem pretty useful for non-simulated things as well. What if I just want to give Niagara a set of points, and tell it to use those as particles? My use case was a “throwing arc” visualisation, for when you’re aiming a thrown projectile. UE provides you with helper functions to generate a list of points from a given start position and velocity (see the “Predict Projectile Path” suite of functions), and I want to display that in the world to preview where I’m throwing it.

Read more →

Why? With all the assets that make up a game, it’s easy to forget a setting or two sometimes. One of our most common mistakes is forgetting to set up Sound Attenuation for a given sound wave / cue. If you forget to assign attenuation settings for a sound, it’ll always play at full volume regardless of where it is in the world in relation to a player. In a multipplayer game like ours, it can be even easier to miss because if the sounds are made by the player, you don’t notice that they’re not being attenuated.

Read more →