Making an object stay parallel to the terrain it is on?

I am trying to make an object in one of my games stay paralell to the terain it is riding on, so say if I am going over a mountain I want to make it look like it is going over the mountain. Right now all I can do is use raycasting like this

 var fwd = transform.TransformDirection (Vector3(1,0,0));
if (Physics.Raycast (transform.position, fwd, 1)) {
   transform.Rotate(Vector3(-1,0,0) * speed * Time.deltaTime, Space.World);
   if (Physics.Raycast (transform.position, -fwd, 1)) {
   transform.Rotate(Vector3(1,0,0) * speed * Time.deltaTime, Space.World);
var rit = transform.TransformDirection (Vector3(0,0,1));
if (Physics.Raycast (transform.position, rit, 1)) {
   transform.Rotate(Vector3(0,0,1) * speed * Time.deltaTime, Space.World);
   if (Physics.Raycast (transform.position, -rit, 1)) {
   transform.Rotate(Vector3(0,0,-1) * speed * Time.deltaTime, Space.World);

but that does not allways work, and I was just wondering if there was a more efficient way to do it, it works ok but every once in awhile if I am turning at the same time the object flips and starts going out of control.

I suggest you take a look at my (answered) question here, which is of the same nature:


It's a matter of vector algebra, no raycasting is necessary.

not sure if this is any help but it sounds like you just need to know what the slope of the terrain is at the point your character is at, according to the direction its facing. I think this is code already in the charactermotor that does that:

var movementSlopeAngle = Mathf.Asin(movement.velocity.normalized.y)  * Mathf.Rad2Deg;