I reworked the dildo rail system using a physics constraint instead of a handle, it's much smoother now.
View attachment 3925458
It works much better now, and even has this happy little side effect of getting stuck inside when I let go of it.
First I created a socket I eloquently call pussyhole

it's positioned at the entrance to the vagina, with the X pointing up inside of the vagina (the penetration direction), this is what I will use to aim the dildo.
View attachment 3925468
I then create a physics constraint in the female characters blueprint with these settings:
View attachment 3925489
Then within the female character blueprint construction script I position this physics constraint to be positioned and rotated exactly like the pussyhole socket.
View attachment 3925466
And finally I attach the dildo to it all.
View attachment 3925484
Then to move the dildo I'm just using a standard
physics handle to grab it and move it with the cursor.
I would make this a proper tutorial in the tutorial section but there are sitll a few problems with it i haven't solved.
Namely:
- I can't control maximum penetration depth (this is because soft constraint has 'give' to it, if i wasn't using soft constraint I could set the linear X limit but the major reason I'm not doing that is because using soft constraint mitigates the second problem a bit)
- The character is attached to the dildo as surely as the dildo is attached to the character, which means if you move the dildo to the edge of it's constraint bounds the character mesh moves with it. This is somewhat desirable when the dildo is penetrating, but less so when it is not. I'm not sure how to fix this, I thought I could use 'parent dominates' but I couldn't figure out a way to apply it for this scenario.
You can fix the second issue by manipulating the mass e.g. if the dildo is much lighter than themesh, it can't move it. You just need to make sure that the bones relevant for the hole that you're gonna penetrate are light enough for the dildo to be able to move them. By doing that you can also fix the first issue by using normal constraint instead of soft constraint which allows you to limit the angular movement to a certain range.