Plugin

Quick update: it seemed to crash in editor when i selected PIE, not VR Mode (the rift was still connected though), and it did indeed give me some crash info, i hope is helpful:

MachineId:EDFD7ABC44EBAC7665EB14B419821D91
EpicAccountId:c31dbc241d8a4ad8b365862ccc4a2cfb

Access violation - code c0000005 (first/second not available)

“”

icuuc53
icuuc53
icuuc53
UE4Editor_Core!FICUBreakIteratorManager::DestroyIterator() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\private\internationalization\icubreakiterator.cpp:70]
UE4Editor_Core!FICUBreakIterator::scalar deleting destructor'() UE4Editor_Slate!FTextLayout::~FTextLayout() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\framework ext extlayout.cpp:1861] UE4Editor_Slate!FSlateTextLayout::vector deleting destructor’()
UE4Editor_Slate!FTextBlockLayout::~FTextBlockLayout()
UE4Editor_Slate!SharedPointerInternals::DestroyObject<FTextBlockLayout>() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\public emplates\sharedpointerinternals.h:272]
UE4Editor_Slate!STextBlock::~STextBlock()
UE4Editor_Slate!STextBlock::vector deleting destructor'() UE4Editor_SlateCore!FSimpleSlot::~FSimpleSlot() UE4Editor_SlateCore!SCompoundWidget::~SCompoundWidget() UE4Editor_Slate!SBorder::vector deleting destructor’()
UE4Editor_SlateCore!FSimpleSlot::~FSimpleSlot()
UE4Editor_SlateCore!SCompoundWidget::~SCompoundWidget()
UE4Editor_Slate!SToolTip::vector deleting destructor'() UE4Editor_SlateCore!SWidget::~SWidget() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:798] UE4Editor_SceneOutliner!SInlineEditableTextBlock::scalar deleting destructor’()
UE4Editor_SlateCore!TIndirectArray<SBoxPanel::FSlot,FDefaultAllocator>::DestructAndFreeItems() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\public\containers\array.h:3331]
UE4Editor_SlateCore!TPanelChildren<SBoxPanel::FSlot>::~TPanelChildren<SBoxPanel::FSlot>()
UE4Editor_SlateCore!SHorizontalBox::~SHorizontalBox()
UE4Editor_SceneOutliner!SHorizontalBox::scalar deleting destructor'() UE4Editor_SlateCore!TIndirectArray<SBoxPanel::FSlot,FDefaultAllocator>::DestructAndFreeItems() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\public\containers\array.h:3331] UE4Editor_SlateCore!TPanelChildren<SBoxPanel::FSlot>::~TPanelChildren<SBoxPanel::FSlot>() UE4Editor_SlateCore!SHorizontalBox::~SHorizontalBox() UE4Editor_SceneOutliner!SHorizontalBox::scalar deleting destructor’()
UE4Editor_SlateCore!FSimpleSlot::~FSimpleSlot()
UE4Editor_SlateCore!SCompoundWidget::~SCompoundWidget()
UE4Editor_SceneOutliner!SceneOutliner::SActorTreeLabel::~SActorTreeLabel()
UE4Editor_SceneOutliner!SceneOutliner::SActorTreeLabel::scalar deleting destructor'() UE4Editor_SlateCore!TIndirectArray<SBoxPanel::FSlot,FDefaultAllocator>::DestructAndFreeItems() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\public\containers\array.h:3331] UE4Editor_SlateCore!TPanelChildren<SBoxPanel::FSlot>::~TPanelChildren<SBoxPanel::FSlot>() UE4Editor_SlateCore!SHorizontalBox::~SHorizontalBox() UE4Editor_SceneOutliner!SHorizontalBox::scalar deleting destructor’()
UE4Editor_SlateCore!TIndirectArray<SBoxPanel::FSlot,FDefaultAllocator>::DestructAndFreeItems() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\public\containers\array.h:3331]
UE4Editor_SlateCore!TPanelChildren<SBoxPanel::FSlot>::~TPanelChildren<SBoxPanel::FSlot>()
UE4Editor_SlateCore!SHorizontalBox::~SHorizontalBox()
UE4Editor_SceneOutliner!SHorizontalBox::scalar deleting destructor'() UE4Editor_SlateCore!FSimpleSlot::~FSimpleSlot() UE4Editor_SlateCore!SCompoundWidget::~SCompoundWidget() UE4Editor_SceneOutliner!SceneOutliner::SSceneOutlinerTreeRow::scalar deleting destructor’()
UE4Editor_SceneOutliner!SListView<TSharedPtr<SceneOutliner::ITreeItem,0> >::FWidgetGenerator::OnEndGenerationPass() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\public\widgets\views\slistview.h:473]
UE4Editor_SceneOutliner!SListView<TSharedPtr<SceneOutliner::ITreeItem,0> >::ReGenerateItems() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\public\widgets\views\slistview.h:873]
UE4Editor_Slate!STableViewBase::Tick() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\views\stableviewbase.cpp:237]
UE4Editor_SceneOutliner!STreeView<TSharedPtr<SceneOutliner::ITreeItem,0> >::Tick() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\public\widgets\views\streeview.h:404]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:700]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:19]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_Slate!SBorder::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:94]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_Slate!SBorder::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:94]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_Slate!SBorder::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:94]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:19]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_Slate!SSplitter::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\ssplitter.cpp:166]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_Slate!SSplitter::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\ssplitter.cpp:166]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:19]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_Slate!SBorder::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:94]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:19]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_Slate!SSplitter::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\widgets\layout\ssplitter.cpp:166]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:19]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:39]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\spanel.cpp:19]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:25]
UE4Editor_SlateCore!SWidget::Paint() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swidget.cpp:703]
UE4Editor_SlateCore!SWindow::PaintWindow() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slatecore\private\widgets\swindow.cpp:1663]
UE4Editor_Slate!FSlateApplication::DrawWindowAndChildren() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:964]
UE4Editor_Slate!FSlateApplication::PrivateDrawWindows() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1182]
UE4Editor_Slate!FSlateApplication::DrawWindows() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:927]
UE4Editor_Slate!FSlateApplication::Tick() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1441]
UE4Editor!FEngineLoop::Tick() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\launch\private\launchengineloop.cpp:2461]
UE4Editor!GuardedMain() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\launch\private\launch.cpp:142]
UE4Editor!GuardedMainWrapper() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\launch\private\windows\launchwindows.cpp:126]
UE4Editor!WinMain() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\launch\private\windows\launchwindows.cpp:200]

Similar crash for me

Yep looks like I’m not doing cleanup properly, I’ll have a look at the logs week and push something.

Experimental Branch Update to E0.8.1
-Added HydraPluginComponent with Blueprint Assignable Multi-Cast
Delegates. Click the component and click + to add an event subscription
to the current blueprint
-Plugin components and their events are now multi-cast add them wherever
you want
-Added input mapping events for each controller dock/undock
-Fixed PIE crash, seems stable now
-Removed Binaries folder, just drag and drop Plugins. Packaging does
copy the require dll, but may not run.

is the re-architecture that brings back some of the hydra specific functionality so that you can easily calibrate the device or access raw/historical data.

The general setup is as before, if you just want the basics, ignore hydra specific stuff and use Motion Controllers and their own IM events.


If you want to calibrate or do anything specific, just add a hydra plugin component (renamed to avoid confusion with earlier components). These components are multicast and their events are as well so place them anywhere in multiples if you want to. They are also where you would poll for current or historical data for gesture recognition/etc.

To calibrate you simply call Calibrate or SetBaseOffset on your component.


Calibrate recalibrates the origin as coming from the centroid of your two hydras + the offset. In its default settings it should work as a good T-pose to shoulder midpoint.


If you want to do your own calibration, just come up with a good position offset and set it here, all values onward will maintain calibration, even between PIE sessions.

How about events? Now there are no more interfaces to deal with, instead you click on your hydra plugin component and click the green + to add the event from the details pane. should feel familiar as these are the same blueprint assignable multicast delegates that PrimitiveComponents use for collision checks (e.g. OnBeginOverlap)


e.g. if you want to have all the data to compare buttons or maybe do something with acceleration you can subscribe to the ControllerMoved event


To wrap it up, use input mapping events for all joystick and button input. You can use either the hardware agnostic motion controller buttons or the hydra specific ones, they work the same


Let me know if is simpler or if you liked the old setup better, if so what you liked more about one or the other. style should be more in line with what epic recommends so when the setup becomes stable and useful to you all, it will likely propagate to all my other plugins.

You may have noticed that the binaries folder is also missing, I’ve attempted to automatically package the project with the DLL, but I now need you brave souls to test the packaging/shipping as its the only outstanding issue. You should be able to just package the game and run it, if not let me know what it spits back!

That nasty PIE bug has also been squashed, should be a pretty stable release, pm me any crash logs!

Awesome work, , I’m loving the way the new plugin works. I’m going to have to test it out soon.

Experimental Branch Update to E0.8.2
-Added ButtonPressed and ButtonReleased events to HydraPluginComponent
-Cleaned up code a bit
-Added ability for the plugin to auto-hide your attached MeshComponents,
see readme for details.

update adds button pressed/released events back to the plugin so you can do everything within the blueprint events if you wish.

The new auto-hiding feature is enabled by making the plugin aware of the mesh components you attached to each hand by calling SetMeshComponentLinks and selecting HideMeshComponentWhenDocked = true on the HydraPluginComponent


Then whenever you dock either or both controllers, the associated mesh just hides. Easy.

I also realized the reason the plugin feels like it tracks better, Epic’s input system re-samples input at the end of the frame to have the very latest data. Regular component ticks don’t do which is why the plugin has reduced latency.

Great work ! I tested it a lot today and had zero crashes ! Yoohoo… Saves a lot of time. Could not get my hand around the new calibration thing but whatever… Already got one working myself. Awesome!
Dit not test the packaging yet.

Thanks for your work your plugin has been part of my past two weeks of creation!

Cannot thank you enough, ! i was probably waay too excited when i saw you had updated, things seem to run beautifully now, even in conjunction with the rift, seriously generous and awesome.
if there is some other way i and the others who benefit from your work let me know (patreon, donations etc…) you’re enabling us to develop for the next wave of VR interaction at a time when the upcoming hardware is simply unavailable to us.
You rock.
so much.

Just tested your last update, it works like a charm on 4.9.2, especially the calibration. Saves a lot of time, a big thanks to you . :slight_smile:

, thanks for your work on plugin!

However I’ve encounter quite a nasty issue with the plug-in (4.9 experimental branch on UE4 4.9.2). It might be a UE4 plug-in issue and not related to your work but perhaps (hopefully) you are familiar with the issue.

When I integrate the plug-in in an existing project we’re getting errors every time we open the project. Actors that make use of the HydraComponent (so not the MotionController events) are broken. For some unknown reason the component is not found and thus all functionality related to it is removed from the Actors Blueprint.

When inspecting the logs I noticed this:



LogLinker:Warning: Can't find file '/Script/HydraPlugin'
LogLinker:Warning: Can't find file for asset '/Script/HydraPlugin' while loading D:/Unreal/AwesomeGameProject/Content/Assets/Graphics/Models/Characters/Godzilla01_Skeleton_AnimBlueprint.uasset.
LoadErrors:Error: Error /Game/Assets/Graphics/Models/Characters/Godzilla01_Skeleton_AnimBlueprint : Can't find file for asset. /Script/HydraPlugin
LogLinker:Warning: Can't find file '/Script/HydraPlugin'
LogLinker:Warning: Can't find file for asset '/Script/HydraPlugin' while loading D:/Unreal/AwesomeGameProject/Content/Assets/Graphics/Models/Characters/Godzilla01_Skeleton_AnimBlueprint.uasset.
LoadErrors:Error: Error /Game/Assets/Graphics/Models/Characters/Godzilla01_Skeleton_AnimBlueprint : Can't find file for asset. /Script/HydraPlugin
LogLinker:Warning: Can't find file '/Script/HydraPlugin'
...
HydraPluginLog: Attempting to startup Hydra Module, v0.8.2
HydraPluginLog: Fetching dll from E:/Documents/Unreal Projects/HydraTest/Plugins/HydraPlugin/Source/ThirdParty/Sixense/Binaries/Win64/sixense_x64.dll
HydraPluginLog: Hydra Available.


It appears that the plug-in is loaded after the assets are loaded. Might be the issue? If it is, do you know of a fix / work-around?
When we tried your plug-in using a blank C++ project all seems to work fine… however starting over is not really an option. Especially when there is no guarantee that it will not reappear.
The project started off as a Blueprint project and we’ve added C++ code later on. should not matter but you never know.

Sorry for this “cry for help” kind of post but WHELP! :slight_smile:

hi do you plan to release a compiled version for 4.10 soon ?
Your stuff is amazing so far but we have trouble with 4.9 and like to use the new features of 4.10!

:slight_smile:

Update to 0.8.3
-Updated to 4.10
-Experimental branch merged into master

The experimental branch changes are now in master so if you haven’t tried them, the 0.8+ plugin version works quite differently and I recommend you read the github readme and thread to bring you up to speed.

@ Thanks for all the kind words of appreciation, now go make awesome stuff with 4.10!

[=san;413846]
, thanks for your work on plugin!

However I’ve encounter quite a nasty issue with the plug-in (4.9 experimental branch on UE4 4.9.2). It might be a UE4 plug-in issue and not related to your work but perhaps (hopefully) you are familiar with the issue.

When I integrate the plug-in in an existing project we’re getting errors every time we open the project. Actors that make use of the HydraComponent (so not the MotionController events) are broken. For some unknown reason the component is not found and thus all functionality related to it is removed from the Actors Blueprint.

When inspecting the logs I noticed this:



...


It appears that the plug-in is loaded after the assets are loaded. Might be the issue? If it is, do you know of a fix / work-around?
When we tried your plug-in using a blank C++ project all seems to work fine… however starting over is not really an option. Especially when there is no guarantee that it will not reappear.
The project started off as a Blueprint project and we’ve added C++ code later on. should not matter but you never know.

Sorry for this “cry for help” kind of post but WHELP! :slight_smile:
[/]

Haven’t seen before, you may need to break down the loading or shrink the problem size by trying to recreate the problem from a blank state. Once you have a reliable repro I can take a look into it.

YES :slight_smile: Thanks a lot !

Hello,
I’ve used the plugin for a gamejam, as well as VR stuff, and I’d like to package my project now to create a .exe. I get these errors while packaging, and from what I understand they seem to be linked to the Hydra plugin :



MainFrameActions: Packaging (Windows (64-bit)): Project.Build: ********** BUILD COMMAND STARTED **********
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: XGE was requested, but is unavailable, so we won't use it.
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* UE4Build:
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* ForceMonolithic: False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* ForceNonUnity:False 
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* ForceDebugInfo: False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* UseXGE: False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* UseParallelExecutor: False
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: C:\Program Files\Epic Games\4.10\Engine\Binaries\DotNET\UnrealBuildTool.exe TestMotionSickness Win64 Development -clean "F:\Data\Projects\UE4\TestMotionSickness - Copie\TestMotionSickness.uproject"  -remoteini="F:\Data\Projects\UE4\TestMotionSickness - Copie" -nobuilduht -rocket -NoHotReloadFromIDE
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: Took 2,7106767s to run UnrealBuildTool.exe, ExitCode=0
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: C:\Program Files\Epic Games\4.10\Engine\Binaries\DotNET\UnrealBuildTool.exe TestMotionSickness Win64 Development  "F:\Data\Projects\UE4\TestMotionSickness - Copie\TestMotionSickness.uproject"  -remoteini="F:\Data\Projects\UE4\TestMotionSickness - Copie" -noxge -generatemanifest -rocket -NoHotReloadFromIDE -ignorejunk
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: Took 1,2134635s to run UnrealBuildTool.exe, ExitCode=0
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.PrepareManifest: Copied UBT manifest to C:\Users\Faust\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+4.10\UBTManifest.0.xml
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: C:\Program Files\Epic Games\4.10\Engine\Binaries\DotNET\UnrealBuildTool.exe TestMotionSickness Win64 Development  "F:\Data\Projects\UE4\TestMotionSickness - Copie\TestMotionSickness.uproject"  -remoteini="F:\Data\Projects\UE4\TestMotionSickness - Copie" -noxge -rocket -NoHotReloadFromIDE -ignorejunk
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Creating makefile for TestMotionSickness (no existing makefile)
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Performing full C++ include scan (no include cache file)
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Parsing headers for TestMotionSickness
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool:   Running UnrealHeaderTool "F:\Data\Projects\UE4\TestMotionSickness - Copie\TestMotionSickness.uproject" "F:\Data\Projects\UE4\TestMotionSickness - Copie\Intermediate\Build\Win64\TestMotionSickness\Development\UnrealHeaderTool.manifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -rocket -installed
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Reflection code generated for TestMotionSickness in 5,6982198 seconds
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Performing 10 actions (4 in parallel)
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: PCH.HydraPluginPrivatePCH.h.cpp
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: PCH.UELinkerFixupsName.h.cpp
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\crtdefs.h(10): fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: UELinkerFixups.cpp
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: -------- End Detailed Actions Stats -----------------------------------------------------------
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: ERROR: UBT ERROR: Failed to produce item: F:\Data\Projects\UE4\TestMotionSickness - Copie\Plugins\HydraPlugin\Binaries\Win64\UE4-HydraPlugin.lib
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Total build time: 17,02 seconds
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: Took 17,0528513s to run UnrealBuildTool.exe, ExitCode=5
MainFrameActions: Packaging (Windows (64-bit)): BuildCommand.Execute: ERROR: BUILD FAILED
MainFrameActions: Packaging (Windows (64-bit)): Program.: ERROR: AutomationTool terminated with exception:
MainFrameActions: Packaging (Windows (64-bit)): Program.: ERROR: Exception in AutomationUtils.Automation: Command failed (Result:5): C:\Program Files\Epic Games\4.10\Engine\Binaries\DotNET\UnrealBuildTool.exe TestMotionSickness Win64 Development  "F:\Data\Projects\UE4\TestMotionSickness - Copie\TestMotionSickness.uproject"  -remoteini="F:\Data\Projects\UE4\TestMotionSickness - Copie" -noxge -rocket -NoHotReloadFromIDE -ignorejunk. See logfile for details: 'UnrealBuildTool-2015.11.24-19.23.39.txt' 
MainFrameActions: Packaging (Windows (64-bit)): Stacktrace:    à AutomationTool.CommandUtils.RunAndLog(String App, String CommandLine, String Logfile, Int32 MaxSuccessCode, String Input, ERunOptions Options, Dictionary`2 EnvVars)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.CommandUtils.RunUBT(CommandEnvironment Env, String UBTExecutable, String CommandLine, String LogName, Dictionary`2 EnvVars)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.UE4Build.BuildWithUBT(String ProjectName, String TargetName, UnrealTargetPlatform TargetPlatform, String Config, String UprojectPath, Boolean ForceMonolithic, Boolean ForceNonUnity, Boolean ForceDebugInfo, Boolean ForceFlushMac, Boolean DisableXGE, String InAddArgs, Boolean ForceUnity, Dictionary`2 EnvVars)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.UE4Build.Build(BuildAgenda Agenda, Nullable`1 InDeleteBuildProducts, Boolean InUpdateVersionFiles, Boolean InForceNoXGE, Boolean InUseParallelExecutor, Boolean InForceNonUnity, Boolean InForceUnity, Boolean InShowProgress, Dictionary`2 PlatformEnvVars)
MainFrameActions: Packaging (Windows (64-bit)):    à Project.Build(BuildCommand Command, ProjectParams Params, Int32 WorkingCL)
MainFrameActions: Packaging (Windows (64-bit)):    à BuildCookRun.DoBuildCookRun(ProjectParams Params)
MainFrameActions: Packaging (Windows (64-bit)):    à BuildCommand.Execute()
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.Automation.Execute(List`1 CommandsToExecute, CaselessDictionary`1 Commands)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.Automation.Process(String] CommandLine)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.Program.MainProc(Object Param)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.InternalUtils.RunSingleInstance(Action`1 , Object Param)
MainFrameActions: Packaging (Windows (64-bit)):    à AutomationTool.Program.()
MainFrameActions: Packaging (Windows (64-bit)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
MainFrameActions: Packaging (Windows (64-bit)): Program.: AutomationTool exiting with ExitCode=5
MainFrameActions: Packaging (Windows (64-bit)): Domain_ProcessExit
MainFrameActions: Packaging (Windows (64-bit)): copying UAT log files...
MainFrameActions: Packaging (Windows (64-bit)): RunUAT.bat ERROR: AutomationTool was unable to run successfully.
MainFrameActions: Packaging (Windows (64-bit)): BUILD FAILED


Any idea ?

[=san;413846]
, thanks for your work on plugin!
When I integrate the plug-in in an existing project we’re getting errors every time we open the project. Actors that make use of the HydraComponent (so not the MotionController events) are broken. For some unknown reason the component is not found and thus all functionality related to it is removed from the Actors Blueprint.

[/]

I’m now seeing same problem on 4.9. Everything was working fine in my BP only prototype, but as soon as I changed to a C++ project (and then made a BP pawn set as default via C++ GameMode) appears every open. My project is early enough along that I will try your 4.10 branch

,

I have been able to replicate the problem consistently from a fresh project. Here are the steps using 4.9 and the experimental branch from the other thread. I don’t have UE 4.10 downloaded yet so I haven’t tried it with your new plugin. It seems to be 100% an order of operations problem as the log in post will show. C++ game mode classes seem to be loaded before the hydra plugin causing the issue when they try loading the BP pawn that refers to the yet-to-be-loaded HydraPlugin.



1. Make a new blank C++ project
2. Close the editor, add Hydra plugin
3. Reopen editor, Edit->Plugins confirm hydra plugin is loaded
4. Make a blueprint game mode "MyBlueprintgame" (in root "Content" folder)
5. Make a blueprint pawn "MyHydraPawn" (in root "Content" folder)
6. Open MyHydraPawn. Add HydraPlugin component.
    a. To BeginPlay add a is hydra available node and make it print something the screen
7. Save all
8. Open MyBlueprintGame and make the default pawn "MyHydraPawn" (might have to open the bp twice to get the right options to appear)
9. Edit->Project Settings... -> Maps & Modes make MyBlueprintGame the gameMode
10. P.I.E. and see that your debug print statement shows.
11. Save All then exit the editor
12. Reopen the editor. No error messages, P.I.E. and ensure print statement still shows
13. Make a new C++ class, GameMode, MyCGameMode
14. In Visual studio add a default constructor AMyCGameMode() make a definition with a blank body in the .cpp file.
15. Compile.
16. Go back to the editor. Save all. exit.
17. Reload editor. No errors. Run, see debug message.
18. In visual studio add the following code to the default constructor:
    static ConstructorHelpers::FObjectFinder<UBlueprint> razrbp(TEXT("Blueprint'/Game/MyRazorPawn.MyRazorPawn'"));
    if (razrbp.Object) {
               DefaultPawnClass = (UClass*)razrbp.Object->GeneratedClass;
    }
19. Compile. P.I.E. everything is still fine.
20. Save all, close editor.
21. Open editor. Error messages appear saying "/Game/MyRazorPawn: Can't find file for asset. /Script/HydraPlugin"
22. P.I.E. also presents errors with BP compile
23. Opening MyRazorPawn class show the class is now missing a HydraPlugin component.


Note that is happening even though the default gameMode is still the blueprint version and not the C++ version. Add the HydraPluging back to the BP pawn and everything will run fine until you close the editor and reopen.

Trying to set default pawn class at StartMatch() in the C++ GameMode crashes everything. I suppose I could try spawning a instance of the BP pawn and then attaching the player controller at StartMatch, but error may still persist loading the editor… Here is the log from the editor launching with errors. You can clearly see the missing script errors output before the Hydra plugin begins init.

Pastebin

may expected behaviour of the engine, I don’t really know much about startup order, but for my project I’d really like to have a C++ game mode refer to a BP pawn that uses your (great) plugin.

I’ve opened an issue on your GitHub, but not sure it was a good idea after reading that you advised polling problems into thread, so I’ll reiterate my question here. I’ve packaged a game with your plugin, copy pasted the plugin folder into the packaged game but I get crash when starting the .exe :



MachineId:595E01B1444ED99F3D293181649D4B6D
EpicAccountId:

Access violation - code c0000005 (first/second  not available)

""

TestMotionSickness_Win64_Shipping!FHydraPlugin::DataDelegate() [f:\data\projects\ue4	estmotionsickness - copie\plugins\hydraplugin\source\hydraplugin\private\fhydraplugin.cpp:855]
TestMotionSickness_Win64_Shipping!UHydraPluginComponent::InitializeComponent() [f:\data\projects\ue4	estmotionsickness - copie\plugins\hydraplugin\source\hydraplugin\private\hydracomponent.cpp:21]
TestMotionSickness_Win64_Shipping!AActor::InitializeComponents()
TestMotionSickness_Win64_Shipping!AActor::PostActorConstruction()
TestMotionSickness_Win64_Shipping!AActor::FinishSpawning()
TestMotionSickness_Win64_Shipping!AActor::PostSpawnInitialize()
TestMotionSickness_Win64_Shipping!UWorld::SpawnActor()
TestMotionSickness_Win64_Shipping!UWorld::SpawnActor()
TestMotionSickness_Win64_Shipping!AGameMode::SpawnDefaultPawnFor_Implementation()
TestMotionSickness_Win64_Shipping!AGameMode::execSpawnDefaultPawnFor()
TestMotionSickness_Win64_Shipping!UFunction::Invoke()
TestMotionSickness_Win64_Shipping!UObject::ProcessEvent()
TestMotionSickness_Win64_Shipping!AActor::ProcessEvent()
TestMotionSickness_Win64_Shipping!AGameMode::SpawnDefaultPawnFor()
TestMotionSickness_Win64_Shipping!AGameMode::RestartPlayer()
TestMotionSickness_Win64_Shipping!AGameMode::HandleMatchHasStarted()
TestMotionSickness_Win64_Shipping!AGameMode::SetMatchState()
TestMotionSickness_Win64_Shipping!UWorld::BeginPlay()
TestMotionSickness_Win64_Shipping!UEngine::LoadMap()
TestMotionSickness_Win64_Shipping!UEngine::Browse()
TestMotionSickness_Win64_Shipping!UGameInstance::StartGameInstance()
TestMotionSickness_Win64_Shipping!UGameEngine::Init()
TestMotionSickness_Win64_Shipping!FEngineLoop::Init()
TestMotionSickness_Win64_Shipping!GuardedMain()
TestMotionSickness_Win64_Shipping!GuardedMainWrapper()
TestMotionSickness_Win64_Shipping!WinMain()
TestMotionSickness_Win64_Shipping!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:264]
kernel32
ntdll


Any idea ?

Look’s like bug fixing is back on the menu boys! :stuck_out_tongue:

[=LaP0573;425894]
I’ve opened an issue on your GitHub, but not sure it was a good idea after reading that you advised polling problems into thread, so I’ll reiterate my question here. I’ve packaged a game with your plugin, copy pasted the plugin folder into the packaged game but I get crash when starting the .exe :



...


Any idea ?
[/]

The packaging bug seems like an order problem, the DataDelegate() call at 855 gets called before the reference is set. It will need some moving around and checking load orders in packaged games.

[=astonish;425789]
,

I have been able to replicate the problem consistently from a fresh project. Here are the steps using 4.9 and the experimental branch from the other thread. I don’t have UE 4.10 downloaded yet so I haven’t tried it with your new plugin. It seems to be 100% an order of operations problem as the log in post will show. C++ game mode classes seem to be loaded before the hydra plugin causing the issue when they try loading the BP pawn that refers to the yet-to-be-loaded HydraPlugin.



...


Note that is happening even though the default gameMode is still the blueprint version and not the C++ version. Add the HydraPluging back to the BP pawn and everything will run fine until you close the editor and reopen.

Trying to set default pawn class at StartMatch() in the C++ GameMode crashes everything. I suppose I could try spawning a instance of the BP pawn and then attaching the player controller at StartMatch, but error may still persist loading the editor… Here is the log from the editor launching with errors. You can clearly see the missing script errors output before the Hydra plugin begins init.

Pastebin

may expected behaviour of the engine, I don’t really know much about startup order, but for my project I’d really like to have a C++ game mode refer to a BP pawn that uses your (great) plugin.
[/]

Great investigation, will help narrow potential issue scope. Let me know if 4.10 has the same issue.

Will have a look at these during the weekend, I want new structure to be as solid as the last one.

[=;426092]
Let me know if 4.10 has the same issue.
[/]

Just tried 4.10 with the new plugin and I have the same issue if I follow the steps from my previous post. I’m hopeful I can easily work around it by either creating a type of that pawn at runtime, or grabbing a reference to a pre-placed one in the level and then possessing it with the player controller, but I don’t have the time today to test. It would still be nice to just use the “DefaultPawnClass” assignment. Less work/code :slight_smile: