Announcement

Collapse
No announcement yet.

VR Expansion Plugin

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • started a topic VR Expansion Plugin

    VR Expansion Plugin

    VR Expansion Plugin

    *Updated: 10/107/2019*


    Playable Template Demo
    Template Packaged Download

    Plugin Website:
    https://vreue4.com/

    Plugin Partial Features List:
    https://vreue4.com/features

    Documentation
    https://vreue4.com/documentation

    Website Hosted Patch Notes
    https://vreue4.com/patch-notes


    This plugin is intended to ease the creation of VR games/experiences in UE4. It is up to quite a few different additions now and has a fleshed out wiki to help ease into it (may be a version or two behind at times, I attempt to update it when I can, the template is generally the best informational tool). It is also intended to be compatible with multiplayer experiences without any direct changes from the end user, most of the relevant components / actors replicated themselves over the network with some customization included.

    It is fully Blueprint implemented but can be manually linked to and used in c++ if needed.

    Consider Supporting Me On Patreon

    Latest informational video


    Some Games In progress or released that currently use the plugin (These are just ones I know about)
    https://vreue4.com/games


    Plugin Pre-built Downloads
    https://vreue4.com/binaries


    Plugin Repository
    https://bitbucket.org/mordentral/vrexpansionplugin

    Plugin Example Template Repository
    https://bitbucket.org/mordentral/vrexppluginexample


    Open Input Module (Knuckles/ect until its a main part of the engine it will be a separate module)
    https://vreue4.com/ovri-howto


    Repository Installation articles By Community Member kusogaki77

    Basic Installation Step-By-Step


    Specific Commit Download Tutorial


    Pre-built binary useage

    Template Note:

    I would like to note by the way that everything currently in the template is an example of what I think is best practices (though maybe not implemented as well as I would for an actual game), not everyone is going to need the same set up and not everyone is going to need a full VRcharacter. Custom pawns that just use the motion controllers and camera / parent relative component would be useful to people that don't want gravity / collision. It also has to give examples of far more things than an average game is likely to use, so there WILL be refactoring involved if it is used as a base for one (input bindings for one).

    Template Change Log
    Code:
    04/26/2019
    
    Brought the manual interface implemented objects up to the new IsHeld changes and switched to querying with GripIDs where IsHeld is used elswhere.
    
    11/07/2018
    
    Changed the Gripping sphere trace to use HitLocation instead of ImpactLocation for the socket in range checks, while impact location is supposed to
    fall back to hit location if it wasn't able to be validated, there was an instance with a specific user where that behavior
    was not being shown (even though it works as intended for everyone else...). Since I don't know the engine level cause for this
    inconsistancy and since the actual difference is only up to the radius of the trace sphere (generally very small) I moved to the
    other variable.
    
    08/22/2018
    
    Re-wrote how the character / player controller is initialized to be far cleaner.
    
    Added Knuckles EV2 default controller profile and changed some of the character logic to check for it in OpenVR.
    
    Changed the FPS test pawn to load its profile in a different area
    
    Removed a corrupt BP and prepped everything so that packaging with PackageAllDirectorys works without issues on the template.
    
    Removed unused content that was just bloating the repository (left over EpicVR template content)
    
    Reference BP Grip script will be coming later.
    
    Changed Sedan actor to use a Boxmesh around it for the navigation modifier.
    
    07/18/2018
    
    Added a filter to "CanBeClimbed" to always ignore grip interfaced objects.
    
    Added a VRPlayerStart to the template level in place of the PlayerStart that
    was there before.
    
    Changed drawer actor to use sliders and the new momentum settings
    
    Changed the player controller to wait around for tracking before
    spawning. Checks for valid tracked position and if it isn't valid yet it
    waits before sending the players HMD info to the server (so server delays itself).
    
    05/25/2018
    
    Overhauled how the teleport controllers get the player state and set themselves up a bit.
    
    Added socketing capability to the sample gun for the body component on the example pawn.
    
    Added a socketing check to the VivePawnCharacter in the CallCorrectDropEvent area of the event graph (really simple).
    More complex implementations could skip querying the object and check themselves, or do other things.
    
    05/20/2018
    
    Remade the controller model loading and controller profile support to use the new bOffsetByControllerProfile option
    on the GripMotionControllers.
    
    05/16/2018
    
    Changed controller model loading to be per hand and safe for oculus platform in the template
    
    Corrected Epics roomscale rotation for teleport boundries (unsure if they fixed this in their base template ever).
    
    Added optional tracking sensors to the teleport outline
    Plugin Change Log
    Code:
    06/24/19
    
    Removed Physx and Apex dependancies, massive overhaul to the new physics interface added to the engine, prep work for Chaos
    
    Path notes here: https://vreue4.com/patch-notes?secti...actor-06-24-19
    
    06/13/19
    
    Added some prelim physics changes and replication improvements prior to the more major physics changes coming down
    
    Path notes here:
    https://vreue4.com/patch-notes?secti...eanup-06-13-19
    
    06/04/19
    
    Put out a revision for the LerpToHand grip script
    
    Patch Notes Here: https://vreue4.com/patch-notes?secti...nd-gs-06-04-19
    
    05/16/19
    
    Pushed a fix for throwing with SetAndGripAt center of mass setting with physics grips (the default one)
    
    Patch Notes Here: https://vreue4.com/patch-notes?secti...m-set-05-16-19
    
    05/08/19
    
    Added a new COM (center of mass) calculation / setting setup, this fixes some weird engine interactions with how
    Epic intended that you set COM and welded attachments (it doesn't work correctly with welded children).
    
    Patch notes here: https://vreue4.com/patch-notes?secti...-change-5-8-19
    
    04/26/2019
    
    Pushed another commit to both repositories, I figured that as long as I was requiring some re-factoring of how people connect to IsHeld, that I might as well finish it out fully with where I wanted it to be.
    
    Patch notes here: https://vreue4.com/patch-notes?secti...tor-04-22-2019
    
    04/22/19
    
    Added a beta FlightStick mode to the VRLever class
    
    See Patch Notes:
    https://vreue4.com/patch-notes?secti...de-for-vrlever
    
    04/18/19
    
    Changed the IsHeld Implementation and added AllowsMultiGrip to the VRGripInterface to prepare for some future features.
    
    See Patch Notes:
    https://vreue4.com/patch-notes?secti...anges-04-18-19
    
    04/16/19
    
    Pushed a new update live to both repositories yesterday, forgot to update this thread. I made a bucket updating system for 4.22 to manage the client auth throwing addition and when I saw the new subsystem engine capability I decided it made more sense as one of those. Figured that as long as I was cleaning it up and generalizing it more that I would add some blueprint accessibility to it as well for others to use if they choose too.
    
    Patch notes here: https://vreue4.com/patch-notes?secti...date-subsystem
    
    04/02/2019
    
    Added the GrippablePhysicsReplication class that overrides the default PhysicsReplication class in engine
    to allow for server side smoothing. If "bUseClientAuthThrowing" is enabled (On a grippable actor, not available
    for grippable components) and the grippable is set to a Client auth movement mode. The object will sends
    its state to the server at "UpdateRate" speed and the server will smoothed the replicated physics state
    and replicate back down to the other clients. After the thrown object hits a sleep state or hasn't changed
    status for a time-out period or is picked up it will end the replication.
    
    This is a very alpha feature and will need improvements likely over time.
    
    
    Ported epics 4.22 late update race condition fixes
    
    its also generally cleaner overall now
    
    
    Moved to using epics new local auth check that came in with 4.22, HasLocalOwner is a new component function
    and walks up the ownership chain for authority.
    
    
    Improved oldmove sends missing some special movement flags with CMC's.
    
    Added initial replication state to the button component.
    Fixed initial replication somewhat with the VRSlider.
    
    Made all interactibles and grippable components turn off movement replication when gripped.
    This makes it significantly safer to keep them replicating movement.
    
    
    Fixed some initialization issues with the lever on initial replication of the
    initial transform (specifically not re-calculating the angle correctly).
    
    
    Removed the bReplicatesMovement requirement on InitialRelativeTransform for
    all interactibles. Having that was pretty counterproductive. Just turning off
    replication for the component is better if this is needed to be disabled.
    
    
    Large header function body refactor, was about time that I committed to doing this, removing
    function bodies out of headers and moving them into the .cpp.
    
    
    Switched unique render commands with new format in 4.22
    
    
    Added EndPlay to grip scripts to allow people to manage timers and cleanup better.
    
    Move Grip Script Beginplay to a seperate function being called so that I can run custom logic in the
    future (like tick event registration) without the user being able to override the parent
    and delete it.
    
    Removed Grip Script BeginPlay being blueprint callable, that was never intended.
    
    Fixed a display issue with instanced objects in 4.22 and their property
    categories.
    
    
    Added a colorspace check to the openVR library texture creations
    
    02/11/2019
    
    Now caching the secondary attachment pointer, this lets me
    make sure that the server gets a valid pointer on release of secondary grips, also lets me throw drop events
    when the secondary attachment changed but its still a secondary.
    
    Changed to sending the full transform on drop with client auth grips instead of just position / rotation.
    
    Fixed a Z axis bug introduced with the lever angle re-write
    
    Moved EVRInteractibleAxis to the VRInteractibleFunctionLibrary header,
    it belongs there instead.
    
    Switched levers over to use the Interactible library functions
    
    Also made the dial use the same basic logic as the lever for rotation,
    with an option to revert back to direct hand sampling.
    
    Added new grip type "EventsOnly", will skip ALL extra logic of grips and only store the grip
    data and fire the events for it. Whether you do anything else with it or not is up to you.
    Like a CustomGrip except even more barebones as it does not fire TickGrip or obey any of the
    dropping simulation logic, it is also auto excluded from late updates.
    
    Stopped calling "StopSimulating" on Custom Gripped objects automatically.
    It is legal to start and keep a custom grip simulating, that call should have
    never been there. Anyone who needs their custom grips to auto stop simulating on grip
    will need to call it in the OnGrip event themselves.
    
    02/02/2019
    
    Fixed a net smoothing bug with linear smoothing that could cause crashes
    when rotating. Exponential smoothing is the engine default when using smoothing
    and smoothing is off by default in the plugin so this took awhile to run into.
    
    Now initializing some vars that Oculus may not be setting on mobile
    This would be a bug in the base engine source, engine source is still bugged but plugin motion controllers
    should function. Issues happen when tracking is lost on oculus platforms (IE: Oculus GO controller and app loses focus)
    
    
    Made GunTools virtual stock settings part of the global settings structure
    this makes it easier to store a copy in the character and replicate it to the server
    as well as from the server to the gripped object for setting.
    
    Also added the option to UseGlobalVirtualStockSettings in the gun tools grip script.
    When enabled it will load the current settings from the global settings (default true and only for locally controlled).
    When disabled it uses local settings of the script.
    
    
    Added custom movement events for climbing and low grav movement modes. (EventUpdateClimbingMovement/LowGrav)
    
    Is a better way of getting the hand offset than in the actors main tick, run the same logic but here so that it is taken in
    the same frame instead of the next.
    c++ projects can still override PhysCustom_Climbing to do the same or they can overide the EventUpdateClimbingMovement_Implementation
    
    Also am now properly setting / clearing the climbing variables, the time moments when it
    was being done wouldn't work with the new placement of the query.
    
    
    Many lever improvements on the back end
    mostly fixing Axis_Y issues since it is the last order of operations with Quats.
    Also added SetLeverAngle function
    
    Moved button overlap bindings later in init to avoid an editor copy error.
    
    
    Added a BP Accessible IsLocallyControlled to the motion controllers, it can be very useful, mostly
    with avoiding extra casts to check for local owner OnGrip ect.
    
    
    Changed LerpToHand to be a fixed time period of lerp, not speed based.
    
    Added a control distance variable to the LerpToHand gripscript
    If the distance to the hand is smaller than this value then the lerp
    script won't activate on grip.
    
    Default of 0.0f means that it will always activate.
    
    Also added a curve editor to it that is optional.
    
    
    Added some brief descs to the headers for the Grip scripts and removed the
    SHOULD NOT BE USED warning from gun tools.
    
    Fixed a scaling bug with the auto SnapToSocket setup when gripping.
    
    01/04/2019
    
    Many of these changes go for 4.20 and 4.19 versions as well (except for the new gun tools, it is 4.21 only)
    
    Finalized beta version of GunTools Grip Script, supports pivot offsets, recoil instances, virtual mount settings, extended smoothing.
    
    Moved smoothing settings out of default grips and into the gun tools grip script.
    This will lower default grip overhead and also let me specifically fine tune
    the smoothing for gunplay.
    
    Added "WantsDenyLateUpdates" to grip scripts allowing grip scripts to deny late updates when they don't want them.
    
    Opened up Grip Scripts to be editable per instance again instead of just in defaults.
    
    Added remote grip pivot setting to the motion controllers, allows easier remote gripping and custom operations / mobile VR ease of use.
    
    Fixed it so that attachment grips will now have full use of the late update settings
    and features. Also moved the interface late update deny checking to the end of the logic checks
    to save some perf on grips that will be denied anyway.
    
    Also fixed it to support Custom pivot component for attachment grips
    
    Move setting collision on to post moving capsule in seated mode
    Also use teleport for movement from seated position. Fixes some collision issues exiting a physics vehicle.
    
    
    Made bDenyGripping defaults visible for all interactibles.
    Also made BreakDistance be ignored if value is 0.0f on all interactibles (to match
    general grip settings).
    
    Added new DeltaTeleportation, a new teleport type added to help alieviate teleporting with physics simulating skeletal bodies in hand.
    
    Am now filling in the Component Velocity member of the GripMotionControllers.
    
    Added OnStartedTracking and OnEndedTracking events to the motion controllers.
    
    Added prelim OnBeginInteraction and OnEndInteraction events to the button component.
    Also added the Interacting Component to the button events as it is useful in itself.
    
    Removed IgnoreActorWhenMoving from grip inits, it was causing overlap spam as the primitive bodies
    were not correctly clearing overlap passes.
    
    11/07/2018
    
    Set multiple variables to initialize due to 4.21 warnings, regardless of if they really needed to be or not....
    
    Fixed multiple missing includes that UBT was hiding.
    
    Updated openVR tracked device properties to openvr .16
    
    Am now turning off physics simulation locally on all clients on Socketing operations to cover some edge cases / packet miss issues.
    
    The attachment grip type now calls attach on all clients to cover some edge cases / packet miss issues.
    
    Moved the NavMoveCompleted event into BaseMovementComponent so that SimpleCharacters can trigger it as well.
    
    Added teleporting flag to the "Exit Seated Mode" event so that the pawn teleports physics bodies (can't throw things in the way around)
    
    Seated mode now replicates and throws the OnSeatedModeChanged event to ALL players, not just the server and owning client.
    This allows you to react to it locally on simulated proxies as well.
    
    No longer using Epics TimeTick in phys_walking, this causes errors when the framerate gets really high (like when oculus rift is removed
    and the rendering is paused). This actually appears to be a potential bug in general with the root motion addition that I was basing my
    original implementation on.
    
    Changed the gesture components material that you can set for spline drawing to be a material interface instead of a UMaterial *.
    This way you can pass in material instances.
    
    Added in a bool to ignore gesture scaling for specific gestures, Also the ability to save gestures without autoscaling them to the database.
    
    Merged in a client authed movement mode fix that Epic added.
    
    Fixed multiple replication issues with grip scripts and net relevancy, they should be solid now.
    
    Removed dropping a grip if killing the motion controller and we are not the grip authority.
    
    Added a flag to grip scripts that allows the user to notify the gripping controller that it should drop the object as soon as possible.
    It is not safe to directly drop inside of a grip script due to some memory management that the engine is doing when passing back into
    c++.
    
    Added bIsForTeleport to grip scripts GetWorldTransform variables, useful to know on the grip end.
    
    Added BlueprintType to the base grip script class so that they can be directly referenced in BP.
    
    Fixed multiple bugs in the new Interactible Settings grip script.
    
    
    09/21/2018
    
    Added UAISense_Sight_VR, a drop in replacement for UAISense_Sight that offsets to a VR characters HMD location.
    
    09/16/2018
    
    4.19 and 4.20 changes (got back ported to 4.19)
    
    Simplified and improved the HybridWithSweep grip type.
    It should now performs less operations while also being of a higher quality.
    
    
    Allow gripping static mobility objects if the grip type is custom..why not
    Corrected a bad commit on the dial component that was causing some incorrect rotations.
    
    
    Moved SetHeld being called when an object is dropped to before OnGripReleased
    is called.
    
    Also moved it before OnSecondaryRelease is called
    
    Also moved the call to the objects own OnRelease to before its parent
    OnChildGripReleased as it makes sense that the object performs actions on
    itself first.
    
    This brings the flow of execution for dropping to parity with how it is done on grip.
    
    
    4.20 only
    
    Added GripStruct input Add/Remove Secondary Attachment point functions
    
    Many many optimizations and clean ups regarding the gripping and dropping functions, lowering code bloat.
    
    Added GripID as an input to DropObject and DropObjectByInterface, if the passed in object is
    empty it will attempt to use the grip ID to drop instead.
    
    I also added INVALID_VRGRIP_ID = 0 define for code use and locked out index 0 from being
    used as a grip id, this lowers the total number of possible simultanious grips per hand from 127 to 126.
    
    
    Exposed the GripMotionControllers DefaultGripScript pointer to blueprints so
    that people can access it and set variables on it (if it is a blueprint base script that is).
    
    Also Changed the default and gun tools grip scripts so that the pivot point is attained
    from the ParentTransform instead of getting the controller location again. This is not
    only slightly faster, but it also allows people to override the parent transform with something
    else (say a remote component) so that the grip doesn't have to be based on the controller
    itself.
    
    (force/remote grips for instance could provide a proxy components transform instead)
    
    
    Took a byte out of the positional replication for controllers and camera
    by making the logical assumption that 419.43 meters is a size big enough for any
    current roomscale technology.
    
    THEN Took back 1 of the 8 bits that I saved everyone in order to add a
    flag for quantization of the rotation on controllers / cameras.
    
    You can now set it from its default Short quantization to a 10 bit per axis
    quantization method, effectivly saving 2.5 bytes per rep and with 4x the granularity
    of the engine BYTE rotator quantization.
    
    This makes up for the lack of precision on the BYTE method but still allows for some
    decent savings.
    
    Also dropped a byte out of the CustomVRInputVector and RequestedVelocityVector.
    41,943.04 UU's should be MORE than enough leg room for these values.
    
    Also am now rounding MoveAction_Custom vector values to 2 digit precision. I was
    already doing this for all built in movement actions but the custom ones should
    also be restricted like this.
    
    08/22/2018
    
    Added GripScripts fully into the master branch with four reference c++ implementations
    GS_Default (default gripping logic)
    GS_LerpToHand (lerp initial grips to the hand)
    GS_InteractibleSettings (Functions like the removed InteractibleSettings options)
    GS_GunTools ( Currently unfinished set of tools for advanced gun interactions)
    
    Removed rollback on custom movement modes
    This is to remove "climbing mode" hanging in place and seated mode issues.
    Really only an issue in really high packet loss situations, but wanted to cover it.
    
    Also added a GetReplicatedMovementMode function that returns the current Conjoined movement
    mode.
    
    Set OnClimbingSteppedUp to a BlueprintNativeEvent so that c++ users could use it.
    
    Set GetOpenVRModelAndTexture node to not fail out if a texture is missing and to just pass out a nullptr now.
    It was failing on Knuckles Left controllers as they are missing a texure in full model mode from the OpenVR
    RenderModels api.
    
    Corrected an oversight with the new OnDropped event on the motion controllers having a possibly stale variable (thanks SlimeQ)
    
    08/14/2018
    
    GripScripts mostly final form has been added to 4.20 GripScripts Dev branches in
    both repositories. They need some testing and to be put through their paces prior
    to merging into the master branches.
    
    
    Initial knuckles porting and profile setup - (not public for awhile)
    
    
    Skipping some calls to slightly speed up nav agent retrieval
    
    
    Adding OnFinishedLerping events to the slider and lever
    Also enabling throwing slider progress events during lerping by default
    
    Added dial lerping, lerping speed, Finished lerping event
    Also added SetDialAngle function
    
    
    Corrected the HMD offset for the dynamic navigation mesh generation with
    a VRRootComponent.
    
    
    Correcting an oversight where a grip could not simulate on client side
    if replicate movement was never on the object.
    
    Also if a child component is supposed to simulate on drop, we need to also set it clientside
    if the component is not the root component, non root components do not replicate simulation
    state by default so in that case the client also calls it now.
    
    
    Defaulting welding to true for plugin attachment operations, didn't realize that the
    default setting is inverse between c++ and BP.
    
    Fixing socketing by adding a one tick delay after the socket and re-applying
    the relative transform. This is only done if both the parent and the child are simulating
    and is only there to avoid a race condition with the physics thread where the
    original grip constraint can reset the transform out of order prior to destruction.
    
    
    switched sweep detection on grips to component multi instead of sweep single.
    That function automatically accounts for the pivot offset / collision local pose.
    
    
    Worked around a physics replication issue that
    Epic introduced in 4.20, physics replication period is acting kind of badly now. They moved to
    a different (more efficient) system of handling the simulating position replication that
    they ported from Fortnite, however it has some little issues like not ending a targeted
    physics frame position setting when replication is turned on/off / when simulated or
    unsimulated.
    Last edited by mordentral; 10-08-2019, 09:36 PM.

  • replied
    Originally posted by Nostrildumbass View Post

    Hmmm thank you, I'll look into the bone stretching solution. I'm only a few months fresh to UE and game development overall so that'll be something new to learn. I definitely want that approach to accommodate for longer/shorter arms just as you say.

    Before I started using your great plugin (the main thing I wanted it for was for sort out of the box roomscale, but I decided it would be best to just make more use of other stuff it offers), I was just attaching my weapons to my hand's socket, and it would stay there regardless of stretching beyond the skeleton's default limit until I decided to detach it when releasing my grip, so I take it the slot gripping isn't attaching to sockets in the same way? I'm genuinely curious on what's handled differently there.
    It follows the actual motion controller, my plugin doesn't have any way of knowing specifically what mesh you want to deal with. But that is why the PivotOverride exists, you can define any scene component as the controller pivot and all grips will be offset from there.

    The plugin only has one grip type that is actually attachment, the rest are sweeps / physics grips.

    Leave a comment:


  • replied
    Originally posted by mordentral View Post

    Slot grips define where relative to the object that you want the controller at (ie: it positions the object relative to the controller), it doesn't force the object to sit anywhere on your body mesh (it doesn't even have a way to know anything about your body mesh). You can SetPivotComponent on the controller to a scene component that you place on a socket on your mesh though and it will do that, generally though your approach is less ideal than allow bones to stretch or calibrating the body so that they can't out reach the full body avatar that you made, otherwise you will get a lot of annoyed players with below or above average size.

    As for the double BonetoGrip, its a typo in the grip component node, just fixed it. That node is the least used of all as generally you should be using GripObjectByInterface or GripObject instead. Also you shouldn't be gripping a component primarily unless you have a very specific reason, most grips should be on actors, and on interfaced actors for that matter.
    Hmmm thank you, I'll look into the bone stretching solution. I'm only a few months fresh to UE and game development overall so that'll be something new to learn. I definitely want that approach to accommodate for longer/shorter arms just as you say.

    Before I started using your great plugin (the main thing I wanted it for was for sort out of the box roomscale, but I decided it would be best to just make more use of other stuff it offers), I was just attaching my weapons to my hand's socket, and it would stay there regardless of stretching beyond the skeleton's default limit until I decided to detach it when releasing my grip, so I take it the slot gripping isn't attaching to sockets in the same way? I'm genuinely curious on what's handled differently there.

    Leave a comment:


  • replied
    Originally posted by Nostrildumbass View Post

    I finally have some basic weapon gripping working (I struggled a little bit even with the guides you so kindly provided, but I did get there). The problem I'm having now is if I'm holding a weapon and I stretch my hand out as far as I can, the gun is "floating" past my UE mannequin's hands. I'm under the impression that using slot grips should be preventing that and I might just be missing something, correct? I've set up a VRGripP1 and VRGripS1 on my weapon skeleton. Why are there two "Optional Bone to Grip Name" inputs on the Grip Component function? The interact node in my screenshot is just an interface call I'm using to add the gripped item to my inventory and store it as the currently equipped item (goes back and breaks a loop of overlapping actors once the closest one is grabbed).

    By the way, I intend to become a $10 Patreon when the paycheck hits
    Slot grips define where relative to the object that you want the controller at (ie: it positions the object relative to the controller), it doesn't force the object to sit anywhere on your body mesh (it doesn't even have a way to know anything about your body mesh). You can SetPivotComponent on the controller to a scene component that you place on a socket on your mesh though and it will do that, generally though your approach is less ideal than allow bones to stretch or calibrating the body so that they can't out reach the full body avatar that you made, otherwise you will get a lot of annoyed players with below or above average size.

    As for the double BonetoGrip, its a typo in the grip component node, just fixed it. That node is the least used of all as generally you should be using GripObjectByInterface or GripObject instead. Also you shouldn't be gripping a component primarily unless you have a very specific reason, most grips should be on actors, and on interfaced actors for that matter.

    Leave a comment:


  • replied
    Originally posted by mordentral View Post

    www.vreue4.com under the documentation tab has tutorial videos now, he is WIP on them so they are fairly new (and only two so far). I understand that a lot of users prefer video over text based but that isn't exactly my forte.
    I finally have some basic weapon gripping working (I struggled a little bit even with the guides you so kindly provided, but I did get there). The problem I'm having now is if I'm holding a weapon and I stretch my hand out as far as I can, the gun is "floating" past my UE mannequin's hands. I'm under the impression that using slot grips should be preventing that and I might just be missing something, correct? I've set up a VRGripP1 and VRGripS1 on my weapon skeleton. Why are there two "Optional Bone to Grip Name" inputs on the Grip Component function? The interact node in my screenshot is just an interface call I'm using to add the gripped item to my inventory and store it as the currently equipped item (goes back and breaks a loop of overlapping actors once the closest one is grabbed).

    By the way, I intend to become a $10 Patreon when the paycheck hits
    Attached Files

    Leave a comment:


  • replied
    Originally posted by mordentral View Post

    If using the template there are some things that don't play perfectly with the quest (namely some of the more intensive physics assets like the car). You'll have to profile though to really know what it going on.

    I would follow the Android Device Monitor instructions in this Oculus article to get some info back from the device.

    https://developer.oculus.com/blog/de...for-mobile-vr/

    You can feel free to PM me the crash information afterwards if it is plugin related. I have quite a few plugin users on Quest without issues currently so it would either be something esoteric or an actual problem with an implementation you specifically have.
    Thanks, glad to hear about the other developers. I realized the plugin was not at the latest release so that couldn't help. Thanks for the fast response!

    Leave a comment:


  • replied
    Originally posted by Ham1ton View Post
    I've been developing on the Oculus Quest and seem to be getting random crashes without any indication as to what it could be. I've setup several different tests on both Unreal 4.22 and 4.23 but I still get random crashes that send the player back to the Oculus dashboard. I've also setup the same tests without the VRE plugin and things are very stable.I know you are not directly developing for the Android platforms but would you have any idea as to what it could be or what I could try out to prevent crashing?
    If using the template there are some things that don't play perfectly with the quest (namely some of the more intensive physics assets like the car). You'll have to profile though to really know what it going on.

    I would follow the Android Device Monitor instructions in this Oculus article to get some info back from the device.

    https://developer.oculus.com/blog/de...for-mobile-vr/

    You can feel free to PM me the crash information afterwards if it is plugin related. I have quite a few plugin users on Quest without issues currently so it would either be something esoteric or an actual problem with an implementation you specifically have.

    Leave a comment:


  • replied
    I've been developing on the Oculus Quest and seem to be getting random crashes without any indication as to what it could be. I've setup several different tests on both Unreal 4.22 and 4.23 but I still get random crashes that send the player back to the Oculus dashboard. I've also setup the same tests without the VRE plugin and things are very stable.I know you are not directly developing for the Android platforms but would you have any idea as to what it could be or what I could try out to prevent crashing?

    Leave a comment:


  • replied
    Originally posted by Nostrildumbass View Post

    Ah man. Thank you for sharing that video and the info on the build specific downloads. I searched all around for something like this and couldn't find it. I'm going to suggest that fellow that he rename the video from VREP to VR Expansion Plugin (or at least add that to the name) to help others find it more easily. I intend to support you shortly! I did get the VR character working nicely with locomotion and a little bit of animation including crouching and proning (not sure about the replication working yet).
    www.vreue4.com under the documentation tab has tutorial videos now, he is WIP on them so they are fairly new (and only two so far). I understand that a lot of users prefer video over text based but that isn't exactly my forte.

    Leave a comment:


  • replied
    Originally posted by mordentral View Post

    Grippable actor is just for that case yes, however if you are going to be multiplayer at some point you may want to have two separate bases, one based on skeletal mesh and one based on static, as the engines replication does not actually handle some of the mesh stuff when just adding the components to a base actor instead of using the built actor for each of them.

    In singleplayer it wouldn't really matter ever.

    You might want to check out the tutorial video that a community member made off of my "basic gripping" text overview.

    https://www.youtube.com/watch?v=Dh3VJ5PqSYQ

    Also if you want a specific version of the engine on one of the repositories, you can go to downloads and switch to branches and download the locked version of your specific engine version: https://bitbucket.org/mordentral/vre.../?tab=branches


    Keep in mind as well that the OnGrip event is going to fire on the root in that case, component gripping has precedence as it lets you grip child components in an actor. The parent actor would be receiving OnChildGripped with that setup. There is generally no reason to ever have both the root and the actor itself be a grippable class. You would generally have the root be normal, and then sub components can be additionally grippable over it.
    Ah man. Thank you for sharing that video and the info on the build specific downloads. I searched all around for something like this and couldn't find it. I'm going to suggest that fellow that he rename the video from VREP to VR Expansion Plugin (or at least add that to the name) to help others find it more easily. I intend to support you shortly! I did get the VR character working nicely with locomotion and a little bit of animation including crouching and proning (not sure about the replication working yet).

    Leave a comment:


  • replied
    Originally posted by Nostrildumbass View Post

    Ahhh I see, thank you. The functions are probably it. I might go ahead and just reparent my base class like you originally suggested. I assume a GrippableActor should work instead of GrippableStaticMesh? Some of my items have a static mesh and others have a skeletal (though I do plan to go skeletal for all of them eventually).

    Edit: Not having luck here still. I made a totally new blueprint to try and just get this working to figure out what I'm doing wrong and I can't get even the new blueprint to grip. I made a GrippableActor BP and added a grippable static mesh to it. Neither Grip Actor nor Grip Object are working for me (same as before, the Grip node gets executed but the On Grip event on the new BP object doesn't seem to fire). I can't seem to find the pre-built template for 4.22, is there an archive of pre-built packages somewhere?
    Grippable actor is just for that case yes, however if you are going to be multiplayer at some point you may want to have two separate bases, one based on skeletal mesh and one based on static, as the engines replication does not actually handle some of the mesh stuff when just adding the components to a base actor instead of using the built actor for each of them.

    In singleplayer it wouldn't really matter ever.

    You might want to check out the tutorial video that a community member made off of my "basic gripping" text overview.

    https://www.youtube.com/watch?v=Dh3VJ5PqSYQ

    Also if you want a specific version of the engine on one of the repositories, you can go to downloads and switch to branches and download the locked version of your specific engine version: https://bitbucket.org/mordentral/vre.../?tab=branches


    Keep in mind as well that the OnGrip event is going to fire on the root in that case, component gripping has precedence as it lets you grip child components in an actor. The parent actor would be receiving OnChildGripped with that setup. There is generally no reason to ever have both the root and the actor itself be a grippable class. You would generally have the root be normal, and then sub components can be additionally grippable over it.
    Last edited by mordentral; 10-14-2019, 08:33 AM.

    Leave a comment:


  • replied
    Originally posted by mordentral View Post

    ? You said that you placed a grippable capsule at the weapon grip in your original post? If you implemented the interface manually in a base class then you need to override and fill out all of its functions as well.
    Ahhh I see, thank you. The functions are probably it. I might go ahead and just reparent my base class like you originally suggested. I assume a GrippableActor should work instead of GrippableStaticMesh? Some of my items have a static mesh and others have a skeletal (though I do plan to go skeletal for all of them eventually).

    Edit: Not having luck here still. I made a totally new blueprint to try and just get this working to figure out what I'm doing wrong and I can't get even the new blueprint to grip. I made a GrippableActor BP and added a grippable static mesh to it. Neither Grip Actor nor Grip Object are working for me (same as before, the Grip node gets executed but the On Grip event on the new BP object doesn't seem to fire). I can't seem to find the pre-built template for 4.22, is there an archive of pre-built packages somewhere?
    Last edited by Nostrildumbass; 10-13-2019, 11:58 PM.

    Leave a comment:


  • replied
    Originally posted by Nostrildumbass View Post

    Hmmm.. I do have the interface implemented so I'm not sure I follow. My base class is "item" which is just an actor, but with the VRGrip interface on it. From there I have weapon > primary weapon > AK47. Should that not work this way?
    ? You said that you placed a grippable capsule at the weapon grip in your original post? If you implemented the interface manually in a base class then you need to override and fill out all of its functions as well.
    Last edited by mordentral; 10-13-2019, 10:43 PM.

    Leave a comment:


  • replied
    Originally posted by mordentral View Post

    My plugin supports gripping both actors AND components with various reasons to do one or the other. How you are trying to grip there is to pass in an actor without the interface, and the world transform of a component with the interface. The node is failing out because the object you are sending in to grip doesn't have the interface on it.

    In that use case your actual actor would have to implement the interface to grip it with that node.

    I did realize though that I forgot to put console debug prints in for that specific node to warn that the passed in object is missing the interface, i'll add that for clarities sake in the future.

    The easiest way for you to fix this by the way would be to reparent the base class of your AK (as far back as your inheritance tree goes) to a GrippableStaticMeshActor, then all of the guns down the branch from there would be grippables by default.

    Also note, that although the gun tools will function by default, actions like secondary gripping the front of the gun still have to be called by you, I do not automate base controls like that as it would be too limiting for most users. The very latest example template now has gun tools on the example gun and it shows how to use the recoil system with it.
    Hmmm.. I do have the interface implemented so I'm not sure I follow. My base class is "item" which is just an actor, but with the VRGrip interface on it. From there I have weapon > primary weapon > AK47. Should that not work this way?

    Leave a comment:


  • replied
    Originally posted by Nostrildumbass View Post
    I'm really at a loss here and hoping someone can help me out. I had gripping working through my own interface (I kept it in place and confirmed it still works if I switch back to using it) but I'm trying to switch to using this plugin.

    I set up my character blueprint to execute the Grip Object by Interface node (I confirmed the object I'm grabbing is correctly being passed in as well as the motion controller), but my weapon isn't gripping. On my weapon blueprint (a simple AK47) I placed a grippable capsule at the weapon grip and set the grip logic script to GS Gun Tools. What else is there that's needed for the gripping to work? Nothing happens when I try to grip it but I don't get any errors or anything to help identify what the problem is. I know how to debug blueprints decently well but not C++, so I can't figure out what happens once the Grip Object by Interface node is executed (I do see it being executed in the blueprint debugger). I set up a Grip event on my weapon and I don't see THAT being executed, so something must be wrong at the Grip Object by Interface call.

    Attached a screenshot to show how I'm calling Grip Object by Interface. The boolean checks are just to check whether it's the left or right hand that is grabbing the object (I've simplified this since the time of this post, now I just have a single execute node for Grip Object by Interface)
    My plugin supports gripping both actors AND components with various reasons to do one or the other. How you are trying to grip there is to pass in an actor without the interface, and the world transform of a component with the interface. The node is failing out because the object you are sending in to grip doesn't have the interface on it.

    In that use case your actual actor would have to implement the interface to grip it with that node.

    I did realize though that I forgot to put console debug prints in for that specific node to warn that the passed in object is missing the interface, i'll add that for clarities sake in the future.

    The easiest way for you to fix this by the way would be to reparent the base class of your AK (as far back as your inheritance tree goes) to a GrippableStaticMeshActor, then all of the guns down the branch from there would be grippables by default.

    Also note, that although the gun tools will function by default, actions like secondary gripping the front of the gun still have to be called by you, I do not automate base controls like that as it would be too limiting for most users. The very latest example template now has gun tools on the example gun and it shows how to use the recoil system with it.
    Last edited by mordentral; 10-13-2019, 08:44 PM.

    Leave a comment:

Working...
X