SAMPLE USAGE in Delegate, SpaceLocation would be the struct that is the head of the chain and we are adding an XrSpaceVelocity struct to the chain: void FFireAntSpaceVelocityModule::GetPoseForTimeAddChainStructs(XrSpaceLocation* SpaceLocation, FOpenXRExtensionChainStructPtrs& ChainStructPtrs) { ChainStructPtrs.Add(MakeShared>(SpaceLocation, XR_TYPE_SPACE_VELOCITY)); } OR, if you need to set data in the struct: void FFireAntSpaceVelocityModule::GetPoseForTimeAddChainStructs(XrSpaceLocation* SpaceLocation, FOpenXRExtensionChainStructPtrs& ChainStructPtrs) {TSharedPtr> ChainStructPtr = MakeShared>(SpaceLocation, XR_TYPE_SPACE_VELOCITY); ChainStructPtr->Data.linearVelocity = {1, 2, 3}; // Note: this is useless for XrSpaceVelocity because it is an output chain struct. ChainStructPtrs.Add(ChainStructPtr); }