FPS walking inside of a cylinder

I'm fairly new with Unity, but I need to get the FPSWalker to walk freely within the interior of a cylinder. Think Rama, if you know what the heck that is.

I've seen a lot of tutorials for walkable spheres, mostly using faux gravity, which isn't what I need. Instead I'm sure I can just find some way to use Quaternions and the normals of the current surface to accomplish this.

1) Turn off gravity: done (I think, just turned it off for the FPC's rigidbody and for the floating cylinder - not sure what to do with the gravity calculation in the FPSWalker).

2) Apply a relative downward force in the player's y-direction: done (attached a ConstantForce component to the First Person Controller).

3) Make the player's relative coordinates rotate along with the interior surface of the cylinder <-- here's where all my problems are.

I've tried it a million ways, RaycastHit.normal, etc. There's clearly just an issue of unfamiliarity with the way the FPSWalker works on my part... any help would be appreciated.

--R

If you know the central axis line of the cylinder (should be relatively easy to calculate, a basic function of the cylinder’s rotation), then just subtract the Vector3 of the closest point on the axis from the Vector3 of your walker’s position.

`
------------ cylinder axis

|

| ← Vector you want

|

v

* you
`

Then just change the gravity code in the FPSwalker to apply a constant force in the direction of that vector.

So if your cylinder just goes straight up on the z-axis, and its center is at x=10, y=10, then the vector you want is

Vector3.normalize(Vector3(10-transform.postion.x, 10-transform.position.y, 0))