Did some more car work
Weekend project - Car - YouTube](Weekend project - Car - YouTube)
Did some more car work
Weekend project - Car - YouTube](Weekend project - Car - YouTube)
That car looks awesome!
Pushed new commit to the template and plugin repositories today
Plugin:
Made "Light" versions of the RPCs that send saved movements to the server.
These do not pass in the RequestedVelocity and CustomVRInputVector.
They are called if both the RequestVelocity and CustomVRInputVectors are zero.
cuts down on some of the additional overhead built into the replication in the VR characters.
Also the saved movement capsule Yaw value being sent over the network is now the same calculated Pure yaw that the GenerateOffsetToWorld
uses. will make running back movements slightly faster, as well as slightly more accurate as passing
in just the normal HMD yaw before could yeild slightly different results when the camera is rotated off axis than
if calculating entirely off of the full rotator.
Removed default of grippable actors base components replicating, was an oversite.
Added a new boolean to all grippable components (defaulted: off), bReplicateMovement.
emulates the variable of the same name on actors and controls whether grippables
will replicate their movement when set to replicate (IE: so gameplay tags can replicate).
The value of property is overriden when the current grip type of the grippable is
serverSideMovement, then it forces allowing movement replication.
Turned bReplicates off by default on all grippable components, if you need to set interfacesettings
on placed objects that aren't set to load with the map for the client or have replicated gameplay tags then just turn it on for the component.
Better to have directly set by the game developer than defaulted by me.
I now have more options in the grippable components for finer grained control of them when replication is turned on.
Template
*Car has all 4 seats filled in now.*
I also went into the DropActor RPC in the blueprints for VivePawnCharacter and quantized the requested
angular and linear velocities as well as only passing in the object now instead of the grip (which grip
is now reconstituted on the other side by getting grip by object).
cuts the bytes used to replicate RPC to 1/5 of what it was.
Also a note, and text that I am adding to the plugin wiki’s Tips&Tricks page so people can see it
Grippable Components and Replication
By default all components in the engine are set to bReplicates = false. The grippable components specifically have some properties that can be useful to replicate to clients (Gameplay tags and VRGripInterfaceSettings), if an object is not set to NetLoadOnClient and is placed in the level with custom settings over its base class the values will not replicate to the client unless you set the component to replicate.
bReplicateGripSettingsAndGameplayTags enables / disables them being sent when the component is set to replicate.
Also there is now a bReplicateMovement variable on all grippable components so that when replication is enabled they don’t add additional overhead by also defaulting to replicate their position. When the grippables grip type is ServerSidedMovement it overrides value and auto replicates movement when the component is set to replicate.
Pushed some more changes to the plugin today
Added boolean to player controller (default true) bDisableServerUpdateCamera. When true it disables the automatic view replication from the camera manager for the camera. Typically we are already sending the camera's position / rotation in VR and the replicated value isn't that useful anyway. Unreal tournament turns it off and sends the look value from the clients when important actions happen and in VR most actions happen off of direct input instead anyway. ( removes a 1000b/s replication cost or so).
The boolean can be disable to return the typical engine functionality.
Added ExLight RPCS for char movement that activate when Acceleration is also zero
Removed the defaulting of Replicate movement on grippable components when movement is set to server side. After second thought I would prefer the bReplicateMovement be manually set by plugin users here.
Also added a new game to the “Projects using list”
Run Of Mydan
Hi , I couldnt figure it out how to control camera fov,
I tried inside Vive Pawn Character, where you toggle laser beams with shoulder button, I tried with tying up node “set fied of view” but it doesnt work. I need it for sniper rifle’s zoom in option.
How can I solve ?
Hi ,
A small request. Could we have a IsInVREditorPreview node similar to IsInVREditorPreviewOrGame except that it returns false if in game please?
I have apps where desktop/VR mode is user selectable from a UI. My PlayerController decides which pawn to spawn. My default is desktop (fps) pawn. works great except that VR Preview uses the fps pawn. I use IsInVREditorPreview to fix that. Maybe other people will find it useful for that.
Cheers.
Fyi, the door component of the door actor in the template map generates a warning. Changing the gameplay tag to DropType.OnTriggerRelease fixes it.
They disable FOV with a VR enabled camera, regardless generally in VR you should be actually making functional scopes and rendering a view to the scope itself instead of altering field of view for the character.
Its still possible to force a new FOV but it would be VERY disorienting in VR and not likely to behave like you think it would.
Thanks, I couldn’t figure out where that gameplay tag was, they don’t exactly give detailed warning information for gameplay tags yet.
Yea I can add that, no reason not to.
Edit its in, was like a 2 second addition so no reason to sit on it.
Pushed a new commit to the plugin today
Plugin
Added replication smoothing to the camera like the controllers have
Made the first replication directly set the location instead of beginning a lerp, all other replications
after that are lerped too. prevents the initial 'tick' of lerp going from 0,0,0.
Added IsInVRPreview node to the VRExpansionFunctionLibrary
Template
Set the VivePawnCharacter to default smooth the camera replication and to a 60htz rate instead
of the 100htz default.
Pushed new commits to the repository and template
Template
fixed door warning
added offset to spawn logic so that player should arrive
correctly regardless of HMD offset.
Fixed car not using driver since I remade how it handles seats
Set the VivePawnCharacter to default smooth the camera replication and to a 60htz rate instead
of the 100htz default.
Changed how out of body movement works
Now I am spawning a camera actor locally instead of having an attached child actor component
First removes a component/actor from non local characters per character, so it is a slight perf savings.
Secondly removes the damned "vivepawncharacter needs to save" regardless of changes made to it.
Child actor components are still largely bug ridden and messy.
Plugin
Changed non post teleport teleportMoveGrip commands to ignore NoTeleport
and DropOnTeleport objects and exit.** * is actually more serious than it sounds, it could cause static objects that
aren't supposed to move to be able to slightly shift on initial grip***
Added replication smoothing to the camera like the controllers have
Made the first replication directly set the location instead of beginning a lerp, all other replications
after that are lerped too. prevents the initial 'tick' of lerp going from 0,0,0.
Made some fixes to the movement merging/combining capability of the VRCharacter, should be more stable
and reliable now.
Now more appropriatley declaring Important moves so that they are sent again if not Acked
(prior to CustomInputVectors and Navigation Velocity didn't trigger as important).
Made more nuanced checks for CanCombine in the saved movements that acutally allows for combining
movements with HMD movements attached. Uses the same Dot Threshold as the acceleration combinining does.
(5 Degrees by default).
***From initial testing it appears safe now to enable MergeMovements on the movement component, if it remains stable I will default it***
Removed Control Pitch and Control Roll from being replicated AT ALL in the VRCharacter.
We never use these two values. ( saved 3 bytes per rep send)
Upped CapsuleYaw from 1 byte compressed to 1 short compressed for sends
( cost 1 byte per rep send).
(Overall saves 2 bytes per rep send and has a higher accuracy of HMD yaw).
Added alt path to restore original control roll/pitch replication if character is set to follow it
I understand that is a lot of additional code for a 2 byte per rep savings.
Pushed a new commit to the repository
Massive Header file cleanup to better support Non Unity Builds and Linux.
Fixed TeleportMoveGrip teleporting NoTeleport and DropOnTeleport on initial
!IsTeleport grip teleportation check. (ie: on initial grip could teleport things that don't want it)
Motion controller is now only setting ReplicatesMovement on actor grips or when the held
component is the root component. is possible since I added the new movement replication bool
to the grippable components.
Made the new conditional replication system for saved movements more sane and extended it to
the simple character. It costs...2 bits...more than before but is far cleaner and has less functions.
Awesome plugin! Really love your work.
I am in the process of using it with an Oculus Touch, where I mapped the controls sucessfully. One note on teleporting: Proteus template uses the controller rotation to change the orientation after teleporting, which feels great! Have you considered implemening that as well? I find it hard with the touch controllers to orient with the joystick while holding down with it, as it may trigger “button release” without me willing to do so by not pressing it hard enough during rotating.
While every movement is working as intended (I have a Vive also to verify but not setup right now), the Navigation and OutOfBodyNavigation are setup so you can’t change the orientation on teleport arrival, right?
I guess I am doing something wrong with the vehicle. I am not reseated so the car pulls of under me. You solve it by constantly reseating the passengers on every tick, but would simply attaching also work? I tried attaching the VR-Character to my custom vehicle (the bus I was talking about earlier). Position works fine, but rotation stays as it is in world space. I tried snapping loc+rot to target, but the car rotates under me. How do I have to set it up? Do you have any hints. I am not sure if I got my understanding right of coordinate frames. It should attach the whole chaperone / guarding area to the vehicle. I used AttachToActor() on the VRCharacter.
Cheers
I’m not re-seating them on every tick, I am repositioning a scene component so that they stay without a boundry inside the vehicle for their seat.
The actual character itself i DO attach to the car, however is uses a new function that I added to the blueprint character that didn’t exist before so its likely not being called for you post migration. You have to re-create the function in your own character.
Initial tests having worked out for the most part with the vehicle I am considering rolling the additional functions and things into the plugin itself in the future, but for now you would have to re-create the new blueprint functions that are called.
As for teleport rotation, the stick pressed down is an implementation difference between the trackpad / joystick of the two controllers, for oculus I would likely remap to use axis values when not held down so that it works better. But I don’t have rift/touch so getting the implementations perfectly clean for them is bothersome. Controllers orientation to dictate direction would work, but you cut out positional updates while doing it then, if you like it more then feel free to change the teleportation logic to accommodate what you want I either have to build hundreds of options in or choose one as an example and tell people to modify to suite themselves.
Out of body / navigation are not set up for rotation, its possible to do with them but I didn’t feel it was necessary as you can manually turn during the movements and they are setup as roomscale implementations, if you want a standing only version you would want to add a rotation to the final teleport of the out of body.
Hey ,
I’m noticing that the multiplayer menu you made for the example map only connects through steam when the game is packaged for “shipping”, and the LAN buttons only seem to enable connections after I modify the settings in my DefaultEngine.ini to swap the subsystem to null rather than steam. So right now I’m using two DefaultEngine.ini files and I just swap in the appropriate one for packaging and testing with steam, and the other one I use with subsystem null for day to day MP testing without having to package.
The workflow I’ve got going is working for me for now, but thought I’d check if i’m missing something. Is there is a LAN mode within the steam subsystem that can be used to test MP stuff without packaging first? Or is there a way to keep the steam subsystem enabled, and use subsystem null for LAN testing without packaging?
Also, thanks a ton for implementing passenger mode in the Vehicle. Great stuff.
Its possible, I just didn’t account for it in the template, i’ll add the fix in later today. I generally use steam for testing because its actually faster to find the session so I didn’t specifically test with lan much, its a simple edit to the server browser though. Its one of the many subsystem notes I have piled up but don’t always read and remember to do.
[TABLE]
1
You can use the SteamNetDriver for LAN matches. When you open the map make sure you append ?bIsLanMatch=1 to the URL.
Should look like .
Also glad to hear you like the car, it was one of the first requests on the request trello. Its not up to the standards that I had hoped for (openable doors to drive entrance / exit, a trunk, ect) but without the correct models it will have to do. I need to get the logic for re-centering the player so that they can move to a seat or sit down after entering done though. Then I will probably end up rolling some of the code into the plugin itself instead of blueprint to clean it up some, vehicle support isn’t an unreasonable thing to have included and I already had to create an override class for the WheeledVehicle to get it working correctly anyway.
Pushed a new commit to the plugin
Added a NetSmoother component to the VRCharacters (a dummy root scene component), it takes advantage of the ClientSmoothPosition
data that is already calculated for standard characters SkeletalMeshes and applies it to tracked
component root instead. way there is a more smoothed lerp back to the correct position after
the server finishes replicating a character move and the client already predicted it out farther.
only takes effect on simulated proxies. The root can be re-purposed in single player or locally controlled characters to handle things like simulated lean or other effects.
I had considered adding a dummy root to the tracked devices for awhile now so people had some more flexibility without manually re-parenting but the network smoothing gave
me an actual reason to do so.
The smoothing effect can be turned off by turning off network smoothing on the character movement component, still retains the sudden jump to the last replicated position when a simulated proxy stops being sent velocities and stops predicting position though.
Added a AddDeltaAngle function to the VRDialComponent, can be used to set initial rotation / angle of the
dial or to increment it later on. Also is now used for the GripTick tracking of the dial angle.
Exposing bDenyGripping for the lever and dial components, forgot to provide a method to control for them.
Can’t figure out what I’m doing wrong with the gameplay tags, I have them set on the object, but the grab fails on validating tags because the tag is “null” even though I have it set:
Are you editing them on an object that is placed in the level in multiplayer and not set to NetLoadOnClient?
If so you need to enable gameplay tag replication as the client isn’t being passed in the server sided tags.
If the tags are set in the base actor / component itself then it should be working without issues.
I just have a BP with Grippable Static Mesh base placed in the world (physics enabled) and am using play in editor. I set the net settings, but I still can’t get it to see the tags:
Dunno…I just set up the exact same object as you, a GrippableStaticMeshActor with the same gameplay tags and placed in the level and have the correct result. Also every other object in the template is setup the same.
https://i.imgur.com/Oxw2vGM.png