Announcement

Collapse
No announcement yet.

Razer Hydra Plugin

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

    Originally posted by muchcharles View Post
    It was this one =) Awesome work, downloading the 4.9 experimental now after I mess around with the Infiltrator release.
    Just watched the stream and you're right! It was interesting to see someone else's approach from a blank slate to the plugin. I think I will need to fix that docking problem by remembering the left/right offset directly and assume 0=left 1=right unless you dock different.

    Originally posted by Crow87 View Post
    Maybe I'm being simple, but I cannot get the motion controllers to behave as I'd hope. I have to move the wands meters in front of the base unit to have them appear where they ought to be.

    The pawn I'm using for my player character is mostly default - the only changes are a slightly narrower capsule, and some extra interaction functionality - but otherwise everything is standard.

    I've tried moving the MC component to the inverse of the hand position against 0,0,0, but it doesn't actually seem to do anything.
    The experimental branch doesn't have a calibration function directly available yet, I'm thinking about what the best approach would be (probably a global function you can call). If you don't want to wait for a stable release which will include such a function, you can calculate the correct offset yourself and change the parent position to both motion controllers.

    The hydras report their position from the center of the base station (the green orb). Whatever is your parent (e.g. pawn's root component) of your motion controllers will then act as that center. So to move the positions forward you need to calibrate the hydras to a known point. On page 3 in this thread we talked about one calibration method, which is to make a T-Pose with your arms and hitting calibrate (capturing the positions at that pose), which then gives you the offset from the base to the shoulder midpoint (and arm length from the vector/2), you can then add this offset so that the controllers appear almost 1:1. You can set this offset as your controllers' parent position. E.g. make an invisible component parent the two motion controllers and just set that component's position as the offset and it will work as you expect it.

    There are other calibration methods which may work better for VR, e.g. if you place your controller by your face (you know your hmd position) and then extend your arm and take a second calibration point, you get the same offsets but with higher reliability to get closer 1:1 match.
    Plugins: Node.js - TensorFlow - Socket.io Client - ZipUtility - Leap Motion - Hydra - Myo - RealSense

    Comment


      Originally posted by getnamo View Post
      Just watched the stream and you're right! It was interesting to see someone else's approach from a blank slate to the plugin. I think I will need to fix that docking problem by remembering the left/right offset directly and assume 0=left 1=right unless you dock different.



      The experimental branch doesn't have a calibration function directly available yet, I'm thinking about what the best approach would be (probably a global function you can call). If you don't want to wait for a stable release which will include such a function, you can calculate the correct offset yourself and change the parent position to both motion controllers.

      The hydras report their position from the center of the base station (the green orb). Whatever is your parent (e.g. pawn's root component) of your motion controllers will then act as that center. So to move the positions forward you need to calibrate the hydras to a known point. On page 3 in this thread we talked about one calibration method, which is to make a T-Pose with your arms and hitting calibrate (capturing the positions at that pose), which then gives you the offset from the base to the shoulder midpoint (and arm length from the vector/2), you can then add this offset so that the controllers appear almost 1:1. You can set this offset as your controllers' parent position. E.g. make an invisible component parent the two motion controllers and just set that component's position as the offset and it will work as you expect it.

      There are other calibration methods which may work better for VR, e.g. if you place your controller by your face (you know your hmd position) and then extend your arm and take a second calibration point, you get the same offsets but with higher reliability to get closer 1:1 match.
      Ah, now I feel silly. Was trying to move the actual roots for the individual motion controllers - didn't realise they could be parented and moved that way. Oops.

      I'm assuming this experimental branch doesn't yet package properly, as I'm hitting errors every time I build with the plugin loaded, but successful without.

      Comment


        It kinda works in 4.9...but only without the Rift (DK2). When I start the game in "VR Preview" mode, the left and right head movements move the hands (MotionController Components) into the oposite direction. When I look left, the hands go right and the other way round.
        "I'm an engineer. I design illusions and construct the apparatus necessary for performing them."

        Comment


          Originally posted by Constructive Illusions View Post
          It kinda works in 4.9...but only without the Rift (DK2). When I start the game in "VR Preview" mode, the left and right head movements move the hands (MotionController Components) into the oposite direction. When I look left, the hands go right and the other way round.
          You may have pawn rotation attached to your hmd rotation, see https://wiki.unrealengine.com/Oculus_Rift_Separate_View for details on how to separate those. The easiest option is the blueprint one by adjusting the camera manager in a custom player controller.
          Plugins: Node.js - TensorFlow - Socket.io Client - ZipUtility - Leap Motion - Hydra - Myo - RealSense

          Comment


            Originally posted by getnamo View Post
            You may have pawn rotation attached to your hmd rotation, see https://wiki.unrealengine.com/Oculus_Rift_Separate_View for details on how to separate those. The easiest option is the blueprint one by adjusting the camera manager in a custom player controller.
            Thanks, that fixed it

            But there's another problem :P "Hydra Left Joystick Y (and X)" doesn't work while "Hydra Right Joystick Y (and X)" listens to both controllers :/
            "I'm an engineer. I design illusions and construct the apparatus necessary for performing them."

            Comment


              Originally posted by Constructive Illusions View Post
              Thanks, that fixed it

              But there's another problem :P "Hydra Left Joystick Y (and X)" doesn't work while "Hydra Right Joystick Y (and X)" listens to both controllers :/
              Just checked the source and it shouldn't be a problem, did you dock both hydras before trying the joysticks? You can also use the Motion Controller input mapping events to keep the bind hardware agnostic.
              Plugins: Node.js - TensorFlow - Socket.io Client - ZipUtility - Leap Motion - Hydra - Myo - RealSense

              Comment


                First up, i want to thank you VERY much for the work you have put into this, and importantly the recent update to accommodate 4.9, i recieved my hydra today, and am simply loving it!

                I did want to let you know that i am experiencing consistent crashes when using the Rift Dk2, in VR preview mode. During play everything works beautifully, however when i go to exit the VR preview (esc) the editor crashes, unfortunately without displaying crash info.

                I'm not doing anything very interesting with the hydra, merely tracking their position to display hand interactables.

                I realise this is not tremendously helpful to debug, and may indeed be more to do with the rift, if there is anything you would like to have tested or debugged please let me know how i can help.

                Cheers
                -

                Comment


                  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 this is helpful:

                  MachineId:EDFD7ABC44EBAC7665EB14B419821D91
                  EpicAccountId:c31dbc241d8a4ad8b365862ccc4a2cfb

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

                  ""

                  icuuc53
                  icuuc53
                  icuuc53
                  UE4Editor_Core!FICUBreakIteratorManager:estroyIterator() [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\text\textlayout.cpp:1861]
                  UE4Editor_Slate!FSlateTextLayout::`vector deleting destructor'()
                  UE4Editor_Slate!FTextBlockLayout::~FTextBlockLayout()
                  UE4Editor_Slate!SharedPointerInternals:estroyObject<FTextBlockLayout>() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.9\engine\source\runtime\core\public\templates\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>:estructAndFreeItems() [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>:estructAndFreeItems() [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>:estructAndFreeItems() [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>:estructAndFreeItems() [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:rawWindowAndChildren() [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:rawWindows() [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]

                  Comment


                    Similar crash for me

                    Comment


                      Yep looks like I'm not doing cleanup properly, I'll have a look at the logs this week and push something.
                      Plugins: Node.js - TensorFlow - Socket.io Client - ZipUtility - Leap Motion - Hydra - Myo - RealSense

                      Comment


                        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.


                        This 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 this 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. This 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 this is simpler or if you liked the old setup better, if so what you liked more about one or the other. This 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!
                        Last edited by getnamo; 10-07-2015, 10:32 PM.
                        Plugins: Node.js - TensorFlow - Socket.io Client - ZipUtility - Leap Motion - Hydra - Myo - RealSense

                        Comment


                          Awesome work, Getnamo, I'm loving the way the new plugin works. I'm going to have to test it out soon.
                          Storyteller - An immersive VR audiobook player

                          Dungeon Survival - WIP First person dungeon crawler with a focus on survival and environmental gameplay ala roguelikes

                          Comment


                            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.


                            This 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 this which is why the plugin has reduced latency.
                            Last edited by getnamo; 10-08-2015, 12:23 PM.
                            Plugins: Node.js - TensorFlow - Socket.io Client - ZipUtility - Leap Motion - Hydra - Myo - RealSense

                            Comment


                              Great work Getnamo! 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 this one working myself. Awesome!
                              Dit not test the packaging yet.

                              Comment


                                Thanks for your work your plugin has been part of my past two weeks of creation!
                                Last edited by Fantasifall; 10-08-2015, 03:50 PM.

                                Comment

                                Working...
                                X