It’s a little heavy, but consider not attaching your visible skeletal mesh hands directly to your motion controllers like the default VR setup does. Instead, place the visible hand meshes in your pawn and then use the location of the invisible motion controllers as a target to constantly sweep them towards on tick. This way they will track like normally out in open space, but if they have collision and sweep into a wall along the way they will stop short.
A couple of things to keep in mind though: 1) Make sure the physics material on the visible hand collision is set to frictionless so they will glide along that surface and not get hung up as much. 2) A straight line path directly to the motion controllers is not always the closest position they can get (say your hands are inside a wall at an angle for example) … one way we’ve solved that is to try and sweep X then Y then Z in three steps instead of doing the whole transform in a single sweep. And finally 3) You’ll want to distance check how far away they are and override all this after some max distance. An example there is let’s say your hands are under a table and you lift up thru it - you can definitely get to a point where no matter where you are, those hand meshes will stay stuck under that surface indefinitely. So you could say ok if the distance is greater than 20cm, turn off collision, pop them back in place, turn on collision again.
Hope this helps.