Adapt MetaXR and MetaXRInteraction to UE5.7.3

I’m making a game using UE v5.7.3, MetaXR v1.117.0, and MetaXRInteraction v1.85.0. These plugins officially support UE v5.6.0 but with a few minor tweaks I made them to run on UE v5.7.3:

Adapting MetaXR

In Plugins\MetaXR\OculusXR.uplugin, replace "EngineVersion": "5.6.0", by "EngineVersion": "5.7.0",. That will not change the code nor compatibility but suppress the warning that the plugin targets the wrong UE version.

Add these in Config\DefaultEditorPerProjectUserSettings.ini. I think it did it automatically on project launch so might not be useful to do it manually:

[/Script/OculusXRProjectSetupTool.OculusXRPSTSettings]
IgnoredRules=()
CurrentPlatform=14
bBackGroundChecks=True
bStopBuildOnUnAppliedCriticalItems=False
bGuidedTutorialComplete=True
bShowGuidedTutorial=False

Adapting MetaXRInteraction

Likewise, in Plugins\MetaXRInteraction\OculusInteraction.uplugin, replace "EngineVersion": "5.6.0", by "EngineVersion": "5.7.0",

In UE 5.7+, FXRMotionControllerData and GetMotionControllerData were removed, so we can use OutPositions/OutRotations already populated by GetAllKeypointStates, so in Plugins\MetaXRInteraction\Source\IsdkDataSourcesOpenXR\Private\DataSources\IsdkFromOpenXRHandDataSource.cpp replace this

  FXRMotionControllerData MotionControllerData;
  EControllerHand Hand =
      (Handedness == EIsdkHandedness::Left) ? EControllerHand::Left : EControllerHand::Right;

  UHeadMountedDisplayFunctionLibrary::GetMotionControllerData(this, Hand, MotionControllerData);

  if (MotionControllerData.bValid && !MotionControllerData.HandKeyPositions.IsEmpty())

by this

  if (!OutPositions.IsEmpty())

and this

    for (int32 Index = 0; Index < MotionControllerData.HandKeyPositions.Num(); ++Index)
    {
      auto AdjustedTransform = FTransform(
          MotionControllerData.HandKeyRotations[Index],
          MotionControllerData.HandKeyPositions[Index],

by this

    for (int32 Index = 0; Index < OutPositions.Num(); ++Index)
    {
      auto AdjustedTransform = FTransform(
          OutRotations[Index],
          OutPositions[Index],

There also seems to be a few update in the paths syntax: in Plugins\MetaXRInteraction\Source\OculusInteraction\Public\Interaction\Grabbable\IsdkITransformer.h, replace meta = (HasNativeMake = "OculusInteraction.IsdkFunctionLibrary.MakeGrabPoseStruct")) by meta = (HasNativeMake = "/Script/OculusInteraction.IsdkFunctionLibrary:MakeGrabPoseStruct")) and meta = (HasNativeMake = "OculusInteraction.IsdkFunctionLibrary.MakeTargetTransformStruct")) by meta = (HasNativeMake = "/Script/OculusInteraction.IsdkFunctionLibrary:MakeTargetTransformStruct"))

Lastly in Plugins\MetaXRInteraction\Source\OculusInteractionEditor\Private\EditorTelemetry\IsdkTelemetryPrivacySettings.cpp replace return Links.begin().Value(); by return Links.begin()->Value(); and return FText::FromString(Links.begin().Key()); by return FText::FromString(Links.begin()->Key);.

1 Like

Many thanks for that. It’s amazing that the MetaXR plugin compiles in a higher UE version without any major changes. ISDK is compiling as well, but I didn’t do any testing yet in my project.

Btw, i had to replace in \Plugins\MetaXRInteraction\Source\OculusInteractionEditor\Private\EditorTelemetry\IsdkTelemetryPrivacySettings.cpp` line 107

return Links.begin().Value();

by

return Links.begin()->Value;

EDIT: It works on Windows, but I can no longer package for the Quest on my macbook! There are some issues with shaders, and it looks like FPokeAHolePS was never cooked.

LogPlayLevel: Error: UAT: 02-23 22:26:37.433 14270 15044 D UE      : Fatal error: [File:./Runtime/Engine/Private/ShaderCompiler/ShaderCompiler.cpp] [Line: 4793]
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : Missing global shader FPokeAHolePS's permutation 0, Please make sure cooking was successful.
LogPlayLevel: Error: UAT: 02-23 22:26:37.433 14270 15044 D UE      : [2026.02.23-21.26.37:433][  0]Fatal error: [File:./Runtime/Engine/Private/ShaderCompiler/ShaderCompiler.cpp] [Line: 4793]
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : Missing global shader FPokeAHolePS's permutation 0, Please make sure cooking was successful.
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x00000071997F56D4 libUnreal.so(0x00000000089576D4)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x00000071997F7F80 libUnreal.so(0x0000000008959F80)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x000000719A13FC9C libUnreal.so(0x00000000092A1C9C)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x000000719A132048 libUnreal.so(0x0000000009294048)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x000000719A1387FC libUnreal.so(0x000000000929A7FC)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x000000719A154DC8 libUnreal.so(0x00000000092B6DC8)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x00000072C75970F0 libc.so(0x00000000000FD0F0)![Unknown]()  []
LogPlayLevel: UAT: 02-23 22:26:37.433 14270 15044 D UE      : 0x00000072C752EFB4 libc.so(0x0000000000094FB4)![Unknown]()  []

thanks , it works !

when package project , still got some errors, fortunately it finally packed APK and ran on device well