Detecting all surfaces within a field, locations of surfaces included

I want a player controlled character that can defy gravity and just float around, but only if there is a surface close enough. I think I could do this with a trigger (detect if there's a scenery object within a spherical area), but it wouldn't give me any location information. I would like to have some kind of special effect (such as electrical sparks) go between the character and the surfaces (or portion of surface, for large flat objects) closest to them, preferably weaker with distance (dropping off entirely when too far). Also, I would like the ability to do this to multiple surfaces if there are more than one separate object close enough, though this is less important. The effect may be something similar to F-Zero GX when a car boosts and fires electricity on to the ground behind it.

I considered ray casting (from the character) or checking 3d points for collisions, but I don't know how to do that in Unity, and, if I understand correctly, I'd have to wait for the physics engine to do a separate update before I could get the result anyway.

How would you get a list of all the surfaces close to an individual (and access the location of the surface)? And, for larger surfaces, how would you determine the closest point on that surface?

Edit: By the way, there is no ground. The character and objects float in a void. Also, colliders would push the character away, which is why I don't want to use that.

Create a secondary collider and paste it on the transform of your original object. Kill all it's functionality and visibility. Activate it's function as soon as the event occurs where you go to this anti gravitational floating mode. This way you can swap between two different colliders.

If this is only for making it look like you float I guess you could just change the Y center value of the character controller instead but that's kind of cheap.

EDIT 11:02 GMT+1 12/06/2010:

When using detection alone you could attempt using a collider with the isTrigger property set. This overrides the collision and sends a message that can be caught with the OnTriggerExit OnTriggerEnter and OnTriggerStay methods that you can read up on if wanted here

P.S. You can catch the collider and use some math if wanted to determine the closest object with this aswell. All the properties such as the transform should be stored in the caught param.