Use Vector3.Distance to determine if they are close enough. Or you can attach a sphere to the target object, set it as a trigger and switch off its MeshRenderer. Use that sphere's OnTriggerCollide to detect the condition for capture.
To check if an object is on top of another, I will take the capturing object and use Physics.RayCast to cast a ray down and see if it collides with the point to capture. You can also use the output of RayCast to check if the two objects are close enough.