It works now, thank you!
Where can I find full documentation of every component and feature of the plugin? In the website there is some documentation but there are some things that are missing.
The generated node documentation, but yes some things are missing.
Hello!
Can awesome VR plugin be used with another General Movement Component plugin?
Yes and no
No in that most movement plugins can’t handle VR correctly and the amount of overrides used to make the character VR Compliant would likely conflict.
Yes in that you don’t have to use the plugins VR character to use all of the other features of the plugin
I’m having a problem where i can’t create a Grippable Skeletal Mesh Actor for my Grasping Hand. When trying to compile an empty Blueprint of class i get an error of “contains invalid data”.
I tried migrating the grasping hand of the example demo. It compiles and works in the preview but crashes the editor with a fatal error every time the preview is closed.
I’m using Unreal engine 5.1.1 and every other class of the plugin seems to work flawlessly. Does anyone have a clue of what the problem could be?
Try making it in a different directory, if that works then try fixing up redirectors in that directory since you migrated it.
Help, I can’t figure out two things:
- When I have installed physical hands, and when the turn is set not smooth, and with an angle of 45 degrees (the angle is not important, it is important that not smooth turn) then after several turns in a row, after about a minute at each turn begins to submit FPS for a fraction of a second. When I turn off the physical arms, everything is working fine! how to fix it?
- How in plugin to set up passing in sitting mode?
Im used UE 4.27.2
Thanks in advance for your help!!!
The FPS drop is an engine bug in 4.27 from them porting to chaos, its writing the physics bodies over and over to the scene every time the hands unsimulate (to teleport). You have to Recreate the physics state to get around it. That or mark the teleport action to not flag the character to teleport for now.
I had to patch that in to the grips themselves in 4.27 due to that bug
- Not sure what you mean passing?
Know why my VR camera doesn’t move with the pawn in UE5? I tried 5.0 and 5.2 but when I move the character they disconnect from the VR camera and keep moving. Teleport works but not dpad movement.
You aren’t possessing the character?
, can you tell me how
Does the plugin have a movement prediction and correction system? how is the fight against motion sickness when the client is thrown back when the position of the character is out of sync with the server? movement is authoritative on the server? algorithms for predicting, dropping the client back differ from the standard component of the movement?
Hi,
first of all, thank you for your amazing VR Plugin!
Right now, I have set up a Multiplayer VR project, where the players can enter their name and choose an avatar. For the avatars I use https://readyplayer.me/. The players can load their name (set text->Target Render Component in your VR-Pawn) and their avatar (load new avatar->Target ReadyPlayerMeComponent in your VR-Pawn) at runtime. For explanation, it is an educational setup, where 4 students share one PC. So, the students alternate during the session and is the reason why they can change their names and avatars without having to reconnect. The whole necessary code is in the VR-Pawn: Change Name + Avatar → Event on Server (Reliable) → Multicast (Reliable). Most of the time, everything works as expected (you can set name and load avatar for like 15 times - sometimes only 4 times), but it is also possible, that the application crashes. Right now, I have tracked down it crashes during the Multicast call on the client side.
leads me to my problem and the reason for post. When the application crashes, I get error:
Pure virtual function being called while application was running (GIsRunning == 1).
Furthermore, my log files lead me to the VRCharacterMovementComponent.cpp in Line 603. So, can you maybe explain a little bit what part does?
// Validate move only after old and first dual portion, after all moves are completed.
if (MoveData.NetworkMoveType == FCharacterNetworkMoveData::ENetworkMoveType::NewMove)
{
ServerMoveHandleClientErrorVR(ClientTimeStamp, DeltaTime, ClientAccel, MoveData.Location, ClientControlRotation.Yaw, MoveData.MovementBase, MoveData.MovementBaseBoneName, MoveData.MovementMode);
//ServerMoveHandleClientError(ClientTimeStamp, DeltaTime, ClientAccel, MoveData.Location, MoveData.MovementBase, MoveData.MovementBaseBoneName, MoveData.MovementMode);
}
My logs also guide me to :
Script Stack (1 frames):
Character.ServerMovePacked
Which is found also in VRCharacterMovementComponent.cpp in line 1320.
// Send move to server if character is replicating movement
if (bSendServerMove)
{
SCOPE_CYCLE_COUNTER(STAT_CharacterMovementCallServerMove);
if (ShouldUsePackedMovementRPCs())
{
CallServerMovePacked(NewMove, ClientData->PendingMove.Get(), OldMove.Get());
}
/*else
{
CallServerMove(NewMove, OldMove.Get());
}*/
}
In conclusion, my project is crashing during the Multicast on the client side. The problem remains, if I exclude the avatar loading, so no ReadyPlayerMe stuff, just simple SetText.
Maybe you can help me out with problem or just to prevent the crash? Thank you for your help.
And here is one picture to show the setup. Server has name Server and their avatar. Client 1 has name 11 and avatar 1. Client 2 hast name 22 and avatar 2. Client 3 has name 32 and their avatar 2. Client 4 has name 44 and their avatar.
It checks the position of the client vs the servers version and rolls them back if it is too far apart. However there is no pure virtual function in there and if that was the real problem it would happen regardless of you sending out multicasts, which makes me wonder if you have a buffer overflow issue going on with your multicast and its corrupting the packed movement packet.
What engine version are you on?
Also as a side note, that shouldn’t be multicast back to everyone, you should be setting a RepNotify variable for the players name and letting natural replication handle it.
Edit You can PM me the log file as well if you want, though im pretty sure the actual issue is outside of the plugin, the log file would give more context.
Okay I see, like the name implies. I´m using UE 4.27.2
We tried to break it down with breakpoints in Unreal and Yes, it looks like we are getting an buffer overflow caused by our multicast. Thanks for your hint with RepNotify.
Right now I have to wrap my head around the logic. For the name itself it makes sense to me, but for the Avatar not. Because the Avatar will be downloaded at runetime via glTF (once, after that it is stored in the cache). But maybe it’s still the same logic ![]()
So, I guess I have to put the following logic in a RepNotify.
You can rep notify the short code as well yes, and OnRep of it load it.
I managed to RepNotify the name and avatar, is now handled by the server. So, hopefully will fix all my issues I created by myself
atm everything works as expected
I guess in conclusion: the problem was caused by corrupted packed movement over my multicast and had nothing to do with your Plugin. Really appreciate your help.
Really strange that it showed up like that, I would assume it would have been that you were getting strings with a set length but that didn’t actually contain that much data, not sure how that is directly possible tbh.
Max VRSlider not accepting negative values
So the VRSlider has a min vector and a max vector, where the min represents the position at minimum progress and max represents the position as max progress.
But why can I not use negative values (e.g. -50, 0, 0) at the max progress and vice-versa?
You may be on a very old version, some time early on in 4.27 I changed it to ABS that value by default so that negative values are accepted for min.
there is a bUseLegacyLogic switch that falls back to not accepting negative values correctly (as some users were bugging it intentionally for various reasons).
In the context of the slider its all relative to its relative space, so forward negative values don’t make much sense as you would normally rotate the slider the other way.


