multiplayer multiplatform - possible replication issues with VR devices and mac or mobile

I would like to make a multiplayer multiplatform game that connects players with all types of hardware, such as Windows PCs, Apple Macs, mobile devices and VR HMDs.
My intention is that players of any platform will be seen by others as a third person character, much like with VRChat.

For VR players I have to inlcude OpenXR and/or the MetaXR plugin into my project. I am now wondering how you can now spawn and replicate data of VR characters on mac or mobile devices where these plugins are not available?

that’s a very unspecific question. there are multiple ways to solve this.
there are several dimensions where one could answer.

it would help if you try to make a proof of concept and find the specific issues you encounter.

you can have different pawns, and spawn selectively.
or better, you can have one pawn, and enable/disable components depending on the target platform.
that might require conditional compilation through compiler flags. (but i would be super careful with that.

you can put all your vr stuff in a component. and have that selectively compile. (e.g. functions that become stub on other platforms).

openxr will compile to windows just fine (and assume to mac) it just won’t do anything. (you can also deactivate the components).

i would personally go with having different components for different types of pawns. maybe have them inherit from a abse component, so that they the same api.

in any case you will need to do multiple builds.
one for each platform.
so you could simply do something similar to the platform specific includes that the engine uses. (see FGenericPlatform…)

Maybe have the wrong understanding here, but how can I disable components if they are not available at all? I am wondering why I can access OpenXR components like for motion controller on my mac, but cannot ‘see’ the additional inputs for the Oculus Touch controllers (thumb rest) or components for hand tracking?

Sure I have to do different builds. But how would you replicate hand tracking of a Quest VR pawn to a similar pawn on a mac client?

I think I will use something like a replication proxy, where changed variables of the character pawn are passed to a lokal proxy and then this one is replicated instead of the pawn itself.

honestly i’m struggling to understand your questions and your situation.
but ill try anyway.
i had some experience replicating vr, and what i had to do is manually replicate the information.
the transform of all the things that transforms.

on the vr client you get that transform automatically, but then i created an actor compontent that periodically sends that to the server (wiith a tick interval > 0). (this is the autonomous proxy only)

the server then replicates that to the clients. with rep vars or multicast unreliable rpcs (careful with this (on one version of the engine i had issues with unreliable multicasts)).

the same component, on other clients (simulated proxies) will grab those transforms and tween them. with a tick interval closer to the fps (im actually using a custom significance plugin to manage their interval based on distance).

afaik even on vr to vr replication, youll have to replicate teh info manually. since it’s client based.
since the component is custom, it matters not if the data comes from a vr client or a desktop or mobile.

beware that setting the transform on the server, for certain things, might make your stuff “stutter”.
so i don’t set the transform on the server. (for now until i deal with that).

how do you disable something you don’t have? you dont. you add code that doesnt crash if it’s not there.
as long as you can make a build that’s fine.

note that ive posted this before i came up with the final implementation (what ive described above)

there’s a plugin also, but i’m decided to make my own code for it. you might get lucky with it, but beware that what a plugin gives you is all you can do (unless you are ready to modify it), so beware the pro/cons.