What's wrong with this move script?

    var speed = 6.0;
var runSpeed = 10.0;
var jumpSpeed = 8.0;
var gravity = 20.0;

private var moveDirection = Vector3.zero;
private var grounded : boolean = false;

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);
        moveDirection *= speed;
        if (Input.GetButton ("Jump")) {
            moveDirection.y = jumpSpeed;
        }
        if(Input.GetButton("Shift")){
        oldspeed = speed;
            speed = runSpeed;
        }
        else{
          speed = oldspeed;
        }

    }

    // Apply gravity
    moveDirection.y -= gravity * Time.deltaTime;

    // Move the controller
    var controller : CharacterController = GetComponent(CharacterController);
    var flags = controller.Move(moveDirection * Time.deltaTime);
    grounded = (flags & CollisionFlags.CollidedBelow) != 0;
}

@script RequireComponent(CharacterController)

I applied it to a capsule. Nothing happens. The gravity doesn't even work...

if(Input.GetButton("Shift")){
        oldspeed = speed;
            speed = runSpeed;
        }
        else{
          speed = oldspeed;
        }

That part is the problem. oldspeed isn't defined, so it is 0. If you put:

var oldspeed = 5;

Then, change

if(Input.GetButton("Shift")){

To "Fire1" it will work. Although I would call it oldSpeed. You just need to define what "Shift" is and set the variable. ^^

Code is functional (just copy-pasted to test if it worked). However, assumes there is a button defined 'Shift' in the Input setup, so maybe you're going wrong there. Look at your logging if you see anything there.

http://create3dgames.wordpress.com/2012/07/10/moving-objects-through-scripting-in-unity3d/

http://create3dgames.wordpress.com/2012/07/10/moving-objects-through-scripting-in-unity3d/