Falling through platforms

I have a terrain which I can walk on, and I have a few boxes around and platforms to test my |FPS characters motion skills. When I run into a box or platform from the side, I collide with it, like I should, but when I jump ontop of the box or platform, i immediately teleport back to the ground. Any ideas on how to fix this? Here is the motion portion of my controller.

function FixedUpdate() {
if (grounded) {
    // We are grounded, so recalculate movedirection directly from axes.
    moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
    moveDirection = transform.TransformDirection(moveDirection);

        //left shift changes speed to sprintspeed.
if (Input.GetButton ("left shift")) {
    moveDirection *= sprintspeed;
}
        //left control changes speed to crouchspeed and modifies scale and position to a smaller size to crouch.
else if (Input.GetButton ("left ctrl")) {
    moveDirection *= crouchspeed;
    gameObject.transform.localScale.y -= .5;
    gameObject.transform.position.y = .5;
}

else

{
    //if anything else, speed is normal speed and make scale and position standing
    moveDirection *= speed;
            gameObject.transform.localScale.y = 1;
    gameObject.transform.position.y = 1;
}
    //if jump is pressed, jump.
if (Input.GetButton ("Jump")) {
    moveDirection.y = jumpSpeed;
}

}

“gameObject.transform.position.y = 1;”

This line and the corresponding crouch will constantly reset the players Y position. So you could jump, which tells the motion controller to start incrementing the Y but you keep reseting the Y co-ordinate of the player. I would expect your player to have issues with anything that isnt a flat surface.