my player doesn't move at the proper speed for a random time after the level has loaded

i am using the following script

var speed : float = 10;
var gravity : float = 20;
var rotateSpeed : float = 5;

function Update () {
   var controller : CharacterController = GetComponent(CharacterController);
        if(controller.isGrounded && Input.GetKey("up"))
		{
	    moveDirection = Vector3(0, 0, speed);
		moveDirection = transform.TransformDirection(moveDirection);
		}
		
		transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime, 0);
		moveDirection.y -= gravity * Time.deltaTime;
		controller.Move(moveDirection * Time.deltaTime);
}

but for some reason the player does not move at the speed i declared in the speed variable for some time after the level has loaded, this time is sometimes after a couple of seconds and i often just give up waiting it takes so long. is there something wrong with my script or just a bug in unity?

The code as it stands does not compile. If you drop this line in at the top of update…

var moveDirection = Vector3.zero;

…then it works fine on my machine. Any chance you have child object attached to the character? If they have colliders, they can cause collisions and unanticipated behaviors.

Start with a new scene, a plane and a capsule. Attach your script and test it. If it works there, then you know there is something different about your current scene that is causing the problem.