See this guide on how to update your existing project to a new editor release.
Version Released: 10/02/2025
Please note v34.1.1 removes support for any build on v30 on Pixel Streaming.
Added experimental WebUI plugin
Support for the WebUI plugin has been added, allowing users to create web UIs which are embedded into Unreal and can talk back to the main game.
An example has been provided in the Example Map for you to experiment with. Currently this feature only works on Windows and can have a significant performance impact, but it is under active development and will continue improving over the coming releases.
Standardised approach to animations using M² Skeleton
The bone translation retargeting settings have been changed in the M² Skeleton, which is the skeleton used when loading MML avatars. Most of the bones are now set to use the Skeleton's translations, instead of the animation's translations, which should make M²'s animations more compatible with custom avatars.
Removed legacy Analytics API
Given the limitations imposed on our customers by using our platform’s analytics, the decision was made that we should avoid projects implementing analytics with our existing system. We're now providing a viable off-ramp which allows customers to handle their own analytics using JSON. More details can be found here: https://docs.msquared.io/integrations/3rd-party-analytics
BP facing Analytics API removed
What’s broken and why?
The following analytic events have been removed from Blueprints
To preserve the analytics listed above and the associated logic, duplicates of the affected assets need to be made before upgrading to this version, and the analytics called replaced with the appropriate call to the implemented analytics system of your choosing.
How to test it?
Ensure that analytics are captured for the events required.
Change Morpheus terminology to use "split authority" and remove the term “net ownership”
What’s broken and why?
SpawnMorpheusActorWithClientAuthority has been deprecated and replaced with SpawnMorpheusActorWithSplitAuthority.
GetOwningClientConnection has been deprecated and replaced with GetAuthoritativeClientConnection.
The SpawnMorpheusActorWithClientAuthority function was misleading, since the spawned actor is still largely server authoritative. “Split authority” is being adopted as more accurate terminology.
“Owning client connection” in Morpheus is identical to “authoritative client connection”, so we’re removing this terminology entirely to simplify Morpheus.
How to fix it?
Replace all instances in BP code of SpawnMorpheusActorWithClientAuthority with SpawnMorpheusActorWithSplitAuthority and GetOwningClientConnection with GetAuthoritativeClientConnection.
How to test it?
Ensure your Blueprints all compile.
Modified M2 Extras: Skins System
What’s broken and why?
Some functions and classes have been modified in the M2 Extras: Skins System
ListenToSkinUpdates now takes a delegate called OnSkinUpdated, rather than OnConditionMet.
The GetSettingByClass helper takes specifically M2_InstancedObject classes, not any Object
These should be fixable by checking for any compile errors in any downstream logic that uses these functions, and reconnecting the pins.
How to test it?
If you are using M2 Extras: Skins System, there may be compile errors. If there are though, they should be simple to fix.
Removed Scale Test related Level Instances
What’s broken and why?
All Level Instances used in ScaleTestMap_Surround_Example have been broken down into the assets that composed them, with the Level Instances then being deleted.
How to fix it?
If these instances have been used elsewhere in your project, please copy the following assets out of the engine and into your project, then fix references to point to the new copies:
Ensure the Level Instances you have used still appear as they did previously.
Parallel delegates for background high frequency events removed from Blueprints
What’s broken and why?
In the combat helper classes, the parallel versions of the background high frequency events (ShootableComponent::OnHitReceivedBackgroundParallel and CombatComponent::OnShotFiredBackgroundParallel) have been make inaccessible to Blueprints.
The OnHighFrequencyEventReceivedParallel parameter in the BP initialiser for background high frequency events UBackgroundHighFrequencyEventLibrary::InitializeBackgroundHighFrequencyEvent has been removed, and the bUseNonParallelDelegates argument is removed with it.
This is because it’s impractical to write thread-safe code from Blueprints. Using them from BPs often resulted in clients crashing, and faulty BP code should never cause a client crash.
How to fix it?
If any functionality is bound to the above events, move the functionality to the non-parallel versions of the delegates instead.
How to test it?
Check that your OnHitReceived, OnShotFired, and any other custom background high frequency event behaviour continues to work as usual.
M2Extras: Widget Handler moved into M2Example, as “UI Mode Helpers”
What’s broken and why?
The old “M2Extras: Widget Handler” plugin has been removed, in favor of the same functionality in M2Example, now that it is being used in our example UI setup. If you relied on the old helpers, you will need to migrate them over.
How to fix it?
Any uses of the old BPFL_WidgetHandler methods will need updating to the BPFL_UIModeHelpers equivalents:
MarkWidgetNeedsUIMode has been replaced with RequestUIMode
UnmarkWidgetNeedsUIMode has been replaced with ReleaseUIModeRequest
HandleUIModeChangeRequest has been replaced with BindToUIModeChangeRequests
How to test it?
If you have no compile errors, you should be good to go!