No async trace nodes?

Is there a reason there’s no async trace nodes exposed to blueprint? They don’t work on a large amount of devices are something? Seams like a no brainer to move most traces to be async and not tie up the game thread when dealing with a large amount of targets (e.g. big AOE hit).

A big AOE hit should not be done with traces alone, they should be used in combination with overlap. Else you’re tracing for every single actor in the scene- which is a terrible idea. Even then, traces are not super expensive.

Async nodes work by using a process disconnected from the main game thread- as such, it can’t interact with it. Traces need to be done in the main game thread in order to properly query the level.

Async nodes are only to be used when a result can be procured in isolation- basically pure nodes. Think calculating PI to a quadrillion places- you don’t want to wait for that to complete on the main thread before you can continue playing the game. Though if you absolutely need Pi to a quadrillion places at that exact moment, then you will have to wait for it.

I’m not using line traces for aoes. I’m using a sphere trace, but I need to line trace each hit to check for line of sight as I don’t want aoes going through walls. Was thinking of doing the line of sight trace async.

I don’t need them to. They just need to trace and call back my delegate, which will contain the hits. Effectively was looking for the below in BP, but doesn’t exist.

https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/AsyncLineTraceByChannel/

It was to offload the cost of say 50 line traces from the game thread for the line of sight checks. A premature optimization on my part as I don’t really need this right now, but was just looking into it.

What is stopping you from converting to a c++ project and exposing it to blueprints.
You could even do it as a blueprintlibrary with a static method, you would just need to pass in a world context item (any actor) and from it call
PassedActor->GetWorld()->AsyncLineTraceByChannel(…pass in parameters)

Nothing I guess, but am attempting to get more information to see if it’s worth even doing that. The async traces have frame delay so I’m not totally sure it’s worth doing for critical gameplay like applying damage.