Download

VR Expansion Plugin

The template gun does some logic to disable firing if not held at the handle socket, you can remove that logic or add a handle socket to your new mesh.

Or override GetClosestSocketInRange and pass out a component that you move around instead.

Getting exception today (yesterday worked fine, no changes).

Only thing that changed is new version of steam vr. 1.9.13

Here is the error

Ug…yeah the beta version of SteamVR was crashing for people, guess they took it live without fixing it first. This isn’t something that I can fix for you though.

ok gotcha. thanks for the response.

Anyone successfully made the plugin work on Oculus Quest?
I’m trying to make ir run trough version 4.24 but I get this error message:

LogPlayLevel: Error: ERROR: SteamVR.uplugin is referenced via ProjectName.uproject with a mismatched ‘SupportedTargetPlatforms’ field. This will cause problems in packaged builds, because the .uplugin file will not be staged. Launch the editor to update references from your project file, or update references from other plugins manually.

Any idea o how to solve it? or maybe someone already have it running on Quest?
Thank you very much :slight_smile:

Disable the steamvr plugin is all.

Should the grip motion controller function GetControllerDeviceID return a unique id for each motion controller? When I try the setup below, run for both my grip motion controller objects, it always returns the same Device ID value (3). Maybe I am totally misunderstanding what the DeviceID is…? I’m not sure if its completely contextual on my end, it appears that the correct device IDs for my controllers are 4 and 5, according to the output of GetValidTrackedDeviceIds when looking for controllers. For some greater context, I’m trying to differentiate between controller types (primarily, vive wand and index controllers, since most others can be figured out based on the HMD) at grip time so I can adjust the grip transform to look/feel better for the index controllers.

Yeah actually it should, i’ll look into it but I think I fixed something regarding that in 4.23, unsure what engine version you are in.

There is a GetOpenVRControllerType node as well in current plugin versions, its not on the generated node documentation yet is all.

Thanks for the reply! Ahh yeah, we’re still on 4.22. Good to know it isn’t just me at least! I don’t see the GetOpenVRControllerType node either, so it’s probably time to update the plugin on my end before I do anything else.

Hey I’m trying to build a system similar to Boneworks, where in the players hand is physical in the world and can’t go through solid objects. To accomplish this I’ve dragged in the skeletal mesh from the valve unreal VR demo level and added it as a grippable skeletal mesh component to a custom player character based on your VR character. I set the grip type on it to custom. I then “grab” it with a grip motion controller component and attempt to set location with sweep on grip tick. Unfortunately grip tick isn’t ever firing even though I can hit breakpoints on the component gip event and the owners grip. Any idea what I’m doing wrong or if this is even the best way to approach something like this?

Hi all,

I am starting to learn Unreal and try to learn the basics. I have an Oculus Quest and loaded this great Plugin. I tried to get the Gesture System to work, but it writes no Data in the Gesture Database. Is it possible, that there are some problems with the Oculus Quest or my project?
I copied every Step from this tutorial [RunebergVR Plugin v2 - Gestures Component Deep Dive - YouTube

My Project Settings are changed for the Quest (Platforms - Android - APK Packaging). I launch the game directly to the Quest (see Screenshot). I can’t use the VR Preview because Oculus Link is not working for me (endless 3 Dots Loading Screen).
When I paint gestures during the game, they get green but don’t get saved in the Database. I also tried the “Demo Content 6_Gestures” from the Plugin. It says “New Gesture Recorded” but when i try to paint it, it just crashes. And it also saves no new Gestures in the Database. But at least I can use the Gestures stored in the “DA_GesturesDB_Demo”.

Below the Screenshots you can see the part of the log file when the game crashes.

Thanks,
Tommy

](RunebergVR Plugin v2 - Gestures Component Deep Dive - YouTube)

LogPlayLevel: 12-28 12:40:58.704 19660 20090 D UE4 : *** JavaEnvDestructor: 20090
LogPlayLevel: 12-28 12:40:58.705 19660 20089 D UE4 : AndroidEGL::ResetDisplay()
LogPlayLevel: 12-28 12:40:58.705 19660 20089 D UE4 : *** JavaEnvDestructor: 20089
LogPlayLevel: 12-28 12:40:59.793 19660 19688 D UE4 : Used memory: 366211
LogPlayLevel: 12-28 12:41:00.697 19660 20106 D UE4 : [2019.12.28-11.41.00:697][232]LogTcpMessaging: Started Connection to ‘127.0.0.1:59834’
LogPlayLevel: 12-28 12:41:00.698 19660 20106 D UE4 : [2019.12.28-11.41.00:698][233]LogTcpMessaging: Discovered node ‘A7028A2C40A5692812679294CCBB0A39’ on connection ‘127.0.0.1:59834’…
LogPlayLevel: 12-28 12:41:10.025 19660 19688 D UE4 : Used memory: 367683
LogPlayLevel: 12-28 12:41:20.330 19660 19688 D UE4 : Used memory: 368087
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:376][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.379 19660 19686 D UE4 : [2019.12.28-11.41.23:379][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.379 19660 19686 D UE4 : [2019.12.28-11.41.23:379][266]LogUObjectArray: Warning: Invalid object index -572662307
LogPlayLevel: Warning: 12-28 12:41:23.379 19660 19686 D UE4 : [2019.12.28-11.41.23:379][266]LogUObjectArray: Warning: Other object in slot
LogPlayLevel: --------- beginning of crash
LogPlayLevel: Took 0.3269825s to run adb.exe, ExitCode=0
LogPlayLevel: Running: C:\NVPACK\android-sdk-windows\platform-tools\adb.exe -s 1PASH9A21T9301 logcat -d
LogPlayLevel: Took 0.3337775s to run adb.exe, ExitCode=0
LogPlayLevel: ********** RUN COMMAND COMPLETED **********

That is really overdoing it for no reason… You don’t need to grip the hand to sweep it, you can just do it normally on tick. Or better yet, set up a clean physics constraint and have the hand constrained to a primitive component on the controller.

As for why tick grip isn’t firing, it will only fire inside of the gripped component itself.

You are using Runebergs plugin, not mine, they are two entirely seperate things.

Oh damned that’s embarrassing :). But nice to know there are more Plugins - will download yours and try it. Thank you.

EDIT: Never mind, I got it to work.

My project was a Blueprint project. In case someone arrives here from Google, here’s what I did:

  • Add a C++ class through File > New C++ Class > None > Next > Create Class
  • Close Project
  • Download the branch with the same engine version as you’re using from https://bitbucket.org/mordentral/vrexpansionplugin/downloads/?tab=branches (at time of writing 4.24.1 is the latest version of the engine and I grabbed the Master branch)
  • In your project folder, create a folder called Plugins
  • Unzip the branch you downloaded to this Plugins folder
  • Relaunch the project, you’ll get a warning like the screenshot below
  • Click yes to rebuild the VRExpansion module

ORIGINAL:

Hey Joshua, I’m running into a bit of a problem trying to use your plugin. Do you think you can help me out?

I’m trying to follow along with this tutorial:

I grabbed the 4.24 binary from Binaries – VR Expansion Plugin. My engine version is 4.24.1, I’m assuming this is the correct binary to use because there’s no 4.24 version to download?

When I load my project it’s giving me this warning, I click Yes.

cant_compile.png

However, I fails with this error message:

cant_compile_2.png

Would you happen to know what could be causing this?

Hey Mordentral. I have been following the documentation and tutorials provided on your website as well as scouring this forum for posts that might lead me to the answer I’m looking for. While I think I’m on the right track, I’m hoping for some clarification.

My game is primarily focused on gun interactions, so I decided to work on that after I found the basic grabbing interactions working. I have a gun that fires and all that logic works as well as the logic driven by a slider component. What I’m not sure is how I’m supposed to get the secondary interactions from this point.

I have no code set up to designate whether the grip in range is a secondary or primary grip. This should be able to be figured out by the get grip slot in range and according to what I’ve read on the forum here you suggest running through a branch that then passes through to different logic. Is this the right way to go about doing this? The two slot grips on the mesh I have are just for gripping the gun as in a primary and secondary grip for aiming, no interaction with weapon mechanics if this is important (VRGripP1 and VRGripS1).

Secondly, how does this work for something like grabbing a slider component. On my gun I have a slider component that when I pull my secondary hand’s trigger it grips that slider from within the gun itself. Is there another way I should go about interacting with components on the gun because I’m not sure how I would grip a slider through a socket on the mesh as they’re completely unrelated to each other. Is this a case where gameplay tags would be a good move?

Thanks for any pointers I’ve been trying to sus this all out myself but it’s getting to the point where I think I need to ask the big man himself, and well here we are. Thanks again and happy holidays!

Generally for sliders you would be removing the secondary attachment (or primary grip) to interact with the slider manually as it is more natural. But if you have good reason to retain the secondary attachment and grip the slider directly from within the gun that workflow is perfectly acceptable. The new door knob in the example door does that to grip the door when the knob has been disengaged.

As for primary / secondary grip, you can handle it however you want, in the template I set it up so that when you go to grip an object it first checks if another hand is holding the object, if one is then it checks if the object has secondary grips enabled and is within range of a secondary grip slot. If the checks were valid then it moves on to starting a secondary attachment to the hand. If instead one of those checks fails it falls back to checking if it is within range of a primary grip slot to switch hands.

The HasSocketInRange function has a boolean to define if you are checking against a primary or secondary socket, so it will work with both.

Some people prefer to not have that much flexibility and just hardcore distance based secondary gripping and the like, and that is fine as well.

Thanks! I have it working now. I think I was just needlessly over-complicating things in my head.

Hey guys!

First I’d like to say that I absolutely love this plugin, it saves a lot of time :slight_smile:

However, when I try to enable seamless travel, the client crashes during the level-loading…

The host is a Windows machine (to be replaced with an android tablet) and the client is an Oculus Quest.

Everything else works fine, except the seamless travel.

I debugged the game on the quest and during the seamless travel it throws a “Fatal error 11” and then the game just crashes.

Could it better during the travel the player controller is destroyed and that the reason is for the crash?

I’ve setup a transition map with a new (empty) game mode (world override) and seamless travel enabled.

We’re in kind of a hurry to get this working, so please help us :slight_smile:

The unreal engine we’re using is 4.22
The game is LAN only.

Thanks in advance,

Marcel

Error log from monitor.exe:

01-05 12:51:05.963: D/UE4(19738): localhost-0003199708
01-05 12:51:05.963: D/UE4(19738): [2020.01.05-11.51.05:963][483]LogWorld: SeamlessTravel to: /Game/Levels/ROOM_01
01-05 12:51:06.032: D/UE4(19738): [2020.01.05-11.51.06:032][484]LogAudioMixer: Display: Flush succeeded in the source manager command queue (1).
01-05 12:51:06.047: D/UE4(19738): [2020.01.05-11.51.06:047][484]LogAudio: Warning: Waited 36.750259ms for audio thread.
01-05 12:51:06.056: D/UE4(19738): [2020.01.05-11.51.06:056][484]LogAudioMixer: Display: Flush succeeded the source manager command queue (2).
01-05 12:51:06.056: D/UE4(19738): [2020.01.05-11.51.06:056][484]LogAudio: Warning: Waited 46.268700ms for audio thread.
01-05 12:51:06.088: D/UE4(19738): [2020.01.05-11.51.06:088][484]LogUObjectHash: Compacting FUObjectHashTables data took 4.53ms
01-05 12:51:06.094: D/UE4(19738): [2020.01.05-11.51.06:094][484]LogStats: SeamlessTravel FlushLevelStreaming - 0.002 s
01-05 12:51:06.097: D/UE4(19738): [2020.01.05-11.51.06:097][484]LogWorld: Bringing World /Game/TransitionLevel.TransitionLevel up for play (max tick rate 0) at 2020.01.05-12.51.06
01-05 12:51:06.098: A/libc(19738): Fatal signal 11 (SIGSEGV), code 2, fault addr 0xdddddddc in tid 19755 (Thread-2)

Trying destroying the characters prior to actually traveling, its a common crash in engine with many characters, not just in VR, a lot of them don’t destruct in a normal order when traveling.
Also the newer versions of the plugin 12/16/19 and later moved the auto drop on character destruction to EndPlay, which fixes a few issues with things like this.