How to imitate this control system?

I've been working on a script like this, but I haven't been able to figure out how to make it work. I want to create a control system similar to the one seen in this video: http://www.youtube.com/watch?v=snCQ5lPfvJs&playnext_from=TL&videos=UHh7_w4WhfQ

The controls should be relative to the camera's direction, which is easy enough. But they should work based on the character's orientation. If Sonic (for example) is on a vertical wall or even a ceiling, he should be able to move just as though he were on a floor. The camera should also rotate to match him.

I've tried everything I can possibly think of, but every philosophy has failed.

If you were to do this, what logic would you use?

Thanks. -Tuah

It's basically a matter of finding the normal of the surface the actor is standing on, and reorienting the player's lean to accommodate it. I believe there is an example of how to do this in the locomotion system package. Look for a scene where the actor walks around spheres and cylinders, similar to the way mario moves in Super Mario Galaxy.

To re-orient the camera, if you're using the LookAt() function, you can supply an up vector, so you can then use the normal of the plane the actor is being adjusted to as the up vector in the LookAt() call.