VR Expansion Plugin

@StephanMenzelSAP this will be very difficult to track down without the code.

My uneducated guess is there’s some problem with the network authority setup of your class. Server correcting the client, but with wrong values.
I’m afraid I can only point you to some docs that might help you track down the issue (if you haven’t read through them already of course).

“Handling Client Error and Corrections” might give you some clues perhaps

Also check your network traffic with the Networking Insights tool:

Good luck!

Thank you! I figured there wasn’t much hope. My problem with the official docs is that they all cover the regular unreal classes but VRExpansionPlugin provides overrides for all. VRCharacter is there, as well as VRCharacterMovementComponent and I thought something must be different with these.

But perhaps you know this: Should it work? Should I be able to set the control rotation on the clients as described and the camera would not snap back (presumably after replication)?

Meanwhile, I have debugged into this quite extensively and I believe UReplicatedVRCameraComponent is the problem.

I use it the same for VR and desktop usage. Meaning a desktop player also looks “through it”. It replicates its position and rotation. However, when I debug into the client it would seem as if this transform is never anything other than zero, presumably because there’s no tracking and therefore no updates.

So, whenever I add pitch or yaw input, the replicated camera component rotates the camera right back to zero.

I have tried all kinds of switches like bFPSDebugMode which seems to be for that case but none helped.

So, I see two potential fixes:

  • Replace the component by a regular camera component for desktop controlled characters
  • Instead of using AddYawInput() I can try to rotate this component instead and hope it replicates

Both seem rather hacky to me.

All right, I could finally solve this puzzle.

Reason was that I have set the various settings that determine the camera component’s behavior only on the client, but not on the server where the character spawned.

Here are the settings:

VRReplicatedCamera->bUsePawnControlRotation = true;
VRReplicatedCamera->bAutoSetLockToHmd = false;
VRReplicatedCamera->bLockToHmd = false;
VRReplicatedCamera->bFPSDebugMode = true;
VRReplicatedCamera->bUpdateInCharacterMovement = false;

if (UVRCharacterMovementComponent* const cmc = Cast<UVRCharacterMovementComponent>(GetMovementComponent()))
{
	cmc->bAllowMovementMerging = true;
	cmc->bUseClientControlRotation = true;
	cmc->bRunControlRotationInMovementComponent = true;
}

When I set these on both client and server (as they do not replicate) it works.

My takeaways are:

  • It is possible to use desktop or vr with the same UReplicatedVRCameraComponent
  • Setting the control rotation via AddYawInput() on the client is okay
2 Likes

Sorry for the late reply, there is actually an FPS mode you can toggle on in the character that handles mouse input correctly. In VR mode the character has server authed rotation to handle the snap / smooth turn correctly with rollback.

The example templates FPS testing pawn is actually just a subclass of the full BP VR Character with a couple of booleans enabled (FPS mode and control rotation). If you want to reference that character.

Hi Mordentral and other Vr people, i hope everything will be smooth for you.

When i try Vr grippable skeletal mesh actor with metahuman, the head is broken, cut off, then all metahuman body disappear. I know its not only about Vr Expansion Plugin its also problem of metahuman, but can you show me any guiadence? Any clue? I am trying to make a medical simulation so fixing this problem is very important since metahuman face has advanced features of facial morphs. If I simulate body without grip it will work without any problem, but when i grip, the head cut off… Thank you!

Note: I didnt find any solution and I shifted to character creator 4, it was nice and dont have any problem.

Hey, everybody. Faced with the problem of “lagging” of the grabbed object from the hand. If I grab the object and wave my hand, everything is fine and the object is confidently fixed to my hand BUT as soon as I start moving the object starts to lag behind my hand. This happens even if I choose Grip Type not based on physics. The only Grip Type that works well is AttachmentGrip but it doesn’t work for me because it doesn’t have physics. I have also tried changing the Constraint Stiffness and Constraint Damping parameters but no change.

Sounds like you messed with the tick ordering of the components, the motion controllers NEED to tick after the character movement component.

1 Like

Ok I got rid of the problem by selecting Post Physics in tick group (MotionController => Component Tick => Tick Group = Post Physics) and selecting InteractiveHybridCollisionWithSweep in Grip Type. Thanks @mordentral for the hint in solving the problem.

Just keeping this post here because I couldn’t find any information about this problem. I hope it will help someone to avoid losing a few days like it happened to me.

I was making a rifle, wrote a lot of logic and suddenly it just stopped gripping. For a whole day I went through every node hoping to find what I did wrong but nothing. Later I decided to put the problem aside and experiment in VRExpPluginExample and accidentally added VRGripInterface to the Grippable Actor in Interface, which resulted in the same problem I lost 2 days for. When working with the rifle I wanted to add my own interface which was called similar (VRGripButtons) and accidentally clicked on VRGripInterface. As far as I understand it can not be fixed and I will have to create a new Actor and copy all the logic from “Broken” into it. I will attach a video to the post for more clarity.

2025-05-10 11-00-12.mkv (25.3 MB)

Another problem I’ve lost a lot of time for which I can’t find any information.

I was making it possible to attach a scope to the rifle from my previous post. The component to which the scope should be attached was the Collision Sphere (don’t ask me why I chose this particular component. Long story) and everything worked fine, but at some point I found that after detaching the scope from the rifle the attachment logic stopped working properly. Naturally I double-checked every node in the logic and nothing. After experimenting in VRExpPluginExample here is what I found…

If the attachment point is any component except Scene Component, when physics simulation is enabled, when the Actor is hit by an object attached to it, the collision of the attached object is duplicated and stays attached to the Actor even if you make a detaching, which causes any trace to hit the air at first glance, but actually the duplicated collision.
I will attach a video to the post for more clarity. (One video is split into 2 parts because the size is over 29mb).


Don’t do that…just revert whatever you did that changed the tick ordering. IF you post physics tick the controllers then you can’t use physics grips correctly.

Any trick to getting the example project to work (UE5.4)? I’ve tried everything at this point, installing countless out of support modules and rebuilding manually, but absolutely nothing gets me past this.

I made VR project. I want multiplayer for 2-3 peoples.
Simple AUTOMATIC connection to one map without login, avatar choosing, e.t.c
Just matchmaking
I already register account on EOS.
How to connect VR Expansion Plugin to EOS? Some tutorial or manual?

Another problem worth talking about:
If you are going to use Scene Capture 2d, be prepared that all Skeletal Mesh attached to the Motion Controller will lag behind the Motion Controller itself. This will happen if you just put active Scene Capture 2d anywhere in the world. It doesn’t matter where or how.
To fix this just go to the Motion Controller settings in the “Motion Controller” tab and set “Disable Low Latency Update” to “True”.

Been a problem since they first added VR to the engine, the extra scene captures screw up their late update Scene View

You rebuild in visual studio like the install section of the website says too, the example is a c++ based project for compilation.

Step 6 and beyond here: VR Expansion Plugin Documentation – VR Expansion Plugin

Wondering if anyone has tips on how to switch out the VRE hand meshes for custom meshes. I’m using the VRE template, in Unreal Engine 5.4.

I tried exporting the SKM_MannyXR_right skeletal mesh as an FBX, importing into Blender 4.2, then exporting/importing it back into UE5.4 as fbx.

  • When I re-import the new mesh overriding the SKM_MannyXR_right mesh, the skin is completely warped (I added the nails for a test).

This is the skeletal mesh in blender and my export settings:


… and this is what the skeletal mesh and skeleton look like in Unreal engine:


Edit: forgot to share the fbx import settings:

Blender uses the +Y-axis as the forward axis for connected bones. The mannequin hand should use the -X-axis as the forward and the -Y-axis for up.

Try exporting from Blender with the Forward set to -X, and Up as -Y, and try the different Y and Z axes if the bones are still getting rotated around the forward axis.

5.6 binaries and repository branches are live.

1 Like