Vertex snapping of any mesh at runtime

I’m trying to create a runtime 3D distance measurement tool. The idea is to be able to measure the distance from point A to point B in a 3D layout.

I’ve added a script to display the measured distance on the screen, but to improve the functionality of the measurement tool I would like to be able to snap the measurement points (e.g. 2 cubes) to any mesh vertex in the scene. At this point I’m able to snap primitve shapes (like boxes) created in Unity, at runtime, but how about imported models?

In the editor it’s possible to snap any model/mesh by using the “V” key, but at runtime it’s a different story. Is it possible to “access” any vertex for snapping at runtime, without setting up a bunch of snapping points with triggers?

Basically I would like to mimic the editor snapping behaviour also at runtime. I have seen multiple threads on the topic, all of them referring to setting up snapping points, but I figured maybe there’s a more generic (and perhaps less elegant) way to do it?

So when you choose your object with your mouse cursor, send raycast when clicked(probably with a modifier key) and find collided object. Then test all vertices for the closest to hit.point. Set a bool true for activation (holded = true)


Now imagine you holded your object with that clicked point (vertex actually), next find your snap point for another object. Its same workflow, if (holded = true), send raycasts with same method and find collided objects with closest vertices.


So now you have another vertex position to snap. If you click again calculate the distance between first holded vertex and the other To Snap vertex. That vector gives you position change for your holded object, add it to holded objects position.


Done.

Thanks for the tip! Before I got a chance to test I found this asset: Runtime Transform Handles | Modeling | Unity Asset Store and it turns out it already had all the snapping functionality I needed.