June 14, 2025.
This release includes pull requests from the community: 39M (Nil), Deams51 (Mickaël), fchampoux (pixelchamp), HomerJohnston (Kyle Wilcox), IRSMsoso, jnucc, LindyHopperGT, Maksym Kapelianovych, MichaelCenger (Michael Cenger), Numblaze, Rhillion, Ryan DowlingSoka, Soraphis.
This is the first release for UE 5.6, and the last for UE 5.4.
Flow Solo (sample project) releases
UFlowSubsystem::RemoveSubFlow. Now we’re invalidating the AssetInstance->NodeOwningThisAssetInstance pointer after calling AssetInstance->FinishFlow, as this point may be needed in the FinishFlow method. (contributed by fchampoux)CreateFlowInstance as a public method. Useful in projects where Root-SubGraph relations are “replaced” with a loose set of graphs, i.e. card games.
LoadSynchronous() calls out of this method, so external code is allowed to use async asset loading.AddInstancedTemplate, RemoveInstancedTemplate - turned back to protected. It turns out, it doesn’t make sense to duplicate the logic of the CreateFlowInstance method.UFlowGraphNode::RefreshContextPins(bool) changed to protected void UFlowGraphNode::RefreshContextPins(). The existing system has some logic that could result in attempts to recursively call ReconstructNode -> RefreshContextPins -> ReconstructNode -> RefreshContextPins. Currently, there are booleans to guard against this, but both methods are exposed and this feels unclean.UFlowGraphNode::PostLoad now rebuilds the unserialized InputPins and OutputPins arrays using the serialized Pins array.UFlowAsset::HarvestNodeConnections - made this function able to harvest a single node, or harvest the whole graph (pass in nullptr to harvest the whole graph, or pass in a single node to harvest just that node). Then UFlowGraphNode::NodeConnectionListChanged updates node connections for only a single node when its connections are changed.FFlowGraphSchemaAction_NewNode::CreateNode, UFlowGraphSchema::TryCreateConnection, UFlowGraphSchema::BreakNodeLinks, UFlowGraphNode::RemoveOrphanedPin, UFlowGraphNode::AddInstancePin, UFlowGraphNode::RemoveInstancePin.FlowGraphSchemaAction_NewNode::CreateNode now runs ReconstructNode() instead of only spawning default pins.UFlowGraphNode::OnGraphRefresh now runs ReconstructNode() instead of RefreshContextPins(), on all nodes.UFlowGraphNode::RefreshContextPins - no longer runs if an editor transaction is in progress (running undo/redo).UFlowGraphNode::HavePinsChanged - now disregards any orphaned pin connections.UFlowGraphNode::OnReconstructNodeCompleted to trigger the rebuild of SFlowGraphNode widgets whenever ReconstructNode is called.SFlowGraphNode added destructor to unbind from UFlowGraphNode delegates.UFlowGraphSchemaadded virtual bool ShouldAlwaysPurgeOnModification() const override { return false; } to reduce unnecessary graph refreshes.UFlowNodeAddOn - GetContextInput/OutputPins functions changed to ignore invalid pins and write a log warning for invalid pins.UFlowNode::TriggerOutput won’t execute its logic if a given node is deactivated. (contributed by 39M)UFlowNode::Branch never deactivating after checking its condition. (fix suggested by Geckostya)Cleanup method. This fixes calling Cleanup on the attached AddOns. (contributed by Rhillion)UFlowNode_CustomInput after duplicating or copying/pasting.OverridenNodeCategories list in Flow Graph project settings. This way, you can fully reorganize the Flow Palette to your liking. (inspired by LindyHopperGT’s proposal)World category has been effectively renamed Actor since a growing number of projects embrace ECS. It’s useful to separate nodes tied to the OOP paradigm from multi-threaded ECS.FFlowPin struct to avoid using the “BlueprintReadWrite” specific - since that would block users from compiling out cosmetic properties in non-editor builds. (contributed by LindyHopperGT)FFlowDataPinResult_Enum() used in an AI Flow node: “GetBlackboardValues”. (contributed by LindyHopperGT)SubGraph node: added null checks to fix crash while attempting to load Flow Asset removed with “Force Delete” option.Call Owner Function feature.UFlowGraphNode; we no longer need to save assets to remember added breakpoints. Data is now stored in .ini, which was created for this purpose, UFlowDebuggerSettings. Logic is handled by the new UFlowDebuggerSubsystem class. (contributed by Maksym Kapelianovych)
FFlowPinTrait struct has been renamed to FFlowBreakpoint and moved to the FlowDebugger module. If you utilize this struct in your custom code, please re-add it to your project code.FlowDebugger, which is a DeveloperTool module. This is where UFlowDebuggerSubsystem lives. This is extended by the pre-existing editor class: UFlowDebugEditorSubsystem.UFlowGraphNode no longer operates on breakpoints. Instead, UFlowDebuggerSubsystem binds directly to the runtime OnPinTriggered delegate.NodeGuid and PinName instead of UEdGraphPin. Thanks to this, it’s now possible to bind to the OnPinTriggered delegate outside of the editor! Events shall be received in the Standalone game, non-shipping game builds.UEdGraphNod pointer in runtime Flow Node class with WITH_EDITORONLY_DATA since this isn’t even loaded in a Standalone game.CanPlaceBreakpoints() functionality in UFlowGraphNode, return false on UFlowGraphNode_Reroute. (contributed by jnucc)
CanPlaceBreakpoint() on the selected node is true. Also, since multiple breakpoints on nodes can be set/unset at the same time, added the checks in these functions too. Since they are in a for loop, don’t return immediately at the first element, but check if it makes sense to return true on the first item that returns true.TriggerRootFlowCustomInput method. (contributed by Soraphis)BP_OnRootFlowCustomEvent and OnRootFlowCustomEvent.IdentityTags replication. (contributed by MichaelCenger)
AddIdentityTag(s) or RemoveIdentityTag(s) within a single net update did not get replicated properly. It would only replicate the last of each respective operation.