VR Handle skeletal bones Pickup

Hello,

I did the physics of a skeletal mesh. All i working good and correctly.

Now, i want to be able to take parts of the skeletal mesh ( for example the hand ) and moving it around with the vive motion controller. However i still want the other bodies to be simulated while i move the hand around.

I have been struggling 2 days to find the solution, without success…

I tried to convert the skeletal mesh into blueprint, and then use the pickup actor interface. However doing that, it’s not working since the skeletal mesh component is not taking into account the rigid bodies.
I tried to use some box collision trigger in the blueprint: putting it into the hand and using the box as target for the pickup. Not working either…

What can i do about that ?! Is there any way to do it ?

Many thanks

This is not solving my problem of grabing with the motion controllers… I want to be able to grab the hand or any other part of the skeletal that i did has rigid bodies in physics. Right now when i grab with the motion controller, it’s either attaching ALL the skeletal mesh to my hand, either not reacting to the grab. Or at least, before closing the hand, since when the hand is closed, it interact like 2 rigids bodys ( hand closed with any part of the skeletal mesh)

Also, this node is asking me to give the name of the bone. I dont want to move bones directly but just the rigid bodies associated ( that will move bones from there )

Do you think to another posibility ? I don’t know if i am clear enough … ?

Are you trying to achieve something like this? Realistic Physics Assets in VR - Unreal Engine 4 - YouTube

What confuses me is that you are talking about grabbing hands, but in the VR Template the motion controllers have animated hand skeletal meshes attached to them, so you are using your hands to grab other objects. Which “other” hand you are talking about? What does the skeletal mesh you are trying to attach to the controllers look like?

Sure. Go through them, give it a try and post again here if you still encounter issues.

Yes excatly, i want to grab parts of my skeletal mesh like if we were grabbing the objects you showed me in the video.

I attached the skeletal mesh here. I would like to be able grabing the bodies attached to bones. When i talk about the hand i mean in the skeletal mesh that i would like to grab.
I used the example of the hand but i would like to grab all the parts of the skeletal mesh ( all the other bodies too )

I also recorded a video to see what it’s happening right now with the current skeletal mesh : its the easiest way to understand what i mean.
There’s the video:

As you see, i would like to grab different parts of the mesh but it doesn’t react. However, when i close the motion controller hand it’s acting like another body colliding with the parts of the skeletal mesh bodies.

I hope it’s more clear now

Ok Thanks you very much for the reply. I will take the time of looking the tutorial and come back to say if it was the solutions.

So i’ve been throught the tutorial and i’m very happy to have learned this way of grabbing. We are getting closer to the result. Now grabbing the skeletal mesh works ! However it’s still not what it was intended.

The final question is : how i can access to each body in a physical asset of a skeletal mesh to grab them with the controller.

Because now this is the situation. I can grab the skeletal mesh but not the selected bodies. I think this is due to the fact that in the blueprint the target component to take is the entire skeletal mesh. So when take whatever body of the skeletal it acts like taking all the skeletal mesh…

Here the video to explain the thing:

Here is the blueprint of the skeletal mesh.

MC stands for Motion Controllers. So i am saying to grab the component at the position of the motion controller. But it doesnt…

GetClosestPointOnPhysicsAsset seems to be leading to the same result… I think the problem is the component pin in the grab component at location. since we are saying to him to grab the skeletal mesh component and not the body that we are pointing at with the motion controller

Getting closer, good! What is MC? The grab location should be the one of the bone you are trying to grab. A useful node for that is GetClosestPointOnPhysicsAsset.

You can also try to set the bone name out of the GetClosestPointOnPhysicsAsset. Can you share your project via WeTransfer or other service? I will have a look at it.

Before that, can you also try to set the Linear Stiffness of the Physics Handle to a very high value, like 10.000 or more?

I already used a linear Stiffness and angular stiffness of 5000 and more. Just tried 10 000 and 15 000 but it didn’t anything new.

The project:

Thank you very very much for the time you allowing to help me. Thanks.

Here you go! 3 steps to success.

  1. Modify the GrabActor function inside the BP_MotionController. This is needed to get the name of the bone nearest to the motion controller hand.
  2. Modify the Pickup interface. This is needed because we need to pass the name of the bone as input parameter to it.
  3. Modify the testmannequin blueprint so the grab component with the physics handle uses the bone name.

A really big Thanks. This solved the problem !

I am still learning to use ue4 for VR and you helped me really a lot understanding some aspect of this.
Thanks you again

Got it. What I did is actually slightly different from what you are looking for (different use case and solution). In your case you need to use a Physics Handle. This may get a bit tricky to implement if you don’t have a good understanding of how it is supposed to work. Have a look at this series of tutorials by Jonas M.:

They go into details on how this works and how to implement it.

You can also download the mod of Robo Recall and see how they have implemented it. A similar technique is also used in the sticky octopus game in the VR Funhouse, which you can also download and study.

The node you are looking for is called Set All Bodies Below Simulate Physics.

How would you go about Telling it to grab a specific bone if I already have a function that gets me the bone name that I specified in the blueprint?

You can use Grab Component at Location passing in the bone name.

I can’t get the “event pickup” node shown in your “modify test mannequin” picture to come up in my blueprints. even when i turn of context sensitivity. i have everything else set up as you specified but this one thing is holding me back. is that just a custom event you made or am i doing something wrong?

nevermind i got it. but for anyone with the same issue. i solved by implementing the pickup actor interface in my class settings