Movement keys along with the jump button does not work

Hi guys , I have created a video game of a ball with this script below , but I have problems with this script , when I jump with the Space key without using the movement keys WASD or the arrow keys to move , the ball jumps but if instead if i try to jump and to use the movement keys WASD or the arrow keys to move together , The ball not jumps

// speed of the ball
 var speed = 70.0;
 var superspeed = 1.0;
 var radius = 1.0;

 private var velocity : Vector3 =;
 function Start(){
     transform.localScale = * radius * 2;
     var hit : RaycastHit;
     if(Physics.Linecast(transform.position, transform.position - Vector3.up * 500, hit)){
         transform.position = hit.point + Vector3.up * radius;
     // add a rigidbody if we dont have one.
     // set the mass according to the radius.
     rigidbody.mass = 70 * radius;
 function Update () {
     // let see if our body is on the ground.
         speed = 70.0;
     var hit : RaycastHit;
     var isGrounded = Physics.Raycast(transform.position, -Vector3.up, hit, radius * 1.5);
     // base movement off of the camera, not the object.
     // reset the camera's X to zero, so that it is always looking horizontally.
     var x = Camera.main.transform.localEulerAngles.x;
     Camera.main.transform.localEulerAngles.x = 0;
     // now collect the movement stuff This is generic direction.
     var direction = Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));
     // prevent the ball from moving faster diagnally
     if(direction.magnitude > 1.0) direction.Normalize();
     // If we are grounded, then lets see if we want to jump.
   if(isGrounded && Input.GetKeyDown(KeyCode.X)) {
  speed = superspeed;
  rigidbody.AddForce(Camera.main.transform.forward * rigidbody.mass * 160, ForceMode.Impulse);
   // If we are grounded, then lets see if we want to jump.
   if(isGrounded && Input.GetKeyDown(KeyCode.Space)) {
  speed = superspeed;
  rigidbody.AddForce(Camera.main.transform.up * rigidbody.mass * 15, ForceMode.Impulse);
     // if we arent pressing anything, dont mess with the physics.
     if(direction.magnitude > 0){
         // convert isGrounded into something we can use
         var modifier = isGrounded ? 3.0 : 0.5;
         // lets set the direction according to the camera now.
         direction = Camera.main.transform.TransformDirection(direction) * speed * 2;
         // lets take the downward velocity from the current so that we dont get wierd physics results
         direction.y = rigidbody.velocity.y;
         // Now, lets keep track of a velocity.
         // This will let the ball move while we are not pressing anything.
         rigidbody.velocity = Vector3.Lerp(rigidbody.velocity, direction, modifier * Time.deltaTime);
         // Now, lets break the rotation out from the movement.
         var rotation = Vector3(rigidbody.velocity.z,0,-rigidbody.velocity.x) * 120;
         // Lets add some spin to make the ball move better
         rigidbody.angularVelocity = Vector3.Lerp(rigidbody.angularVelocity, rotation, modifier * Time.deltaTime);
     // return the camera's x rotation.
     Camera.main.transform.localEulerAngles.x = x;

After reading your code, I think I found the problem.

When you press a direction, you will at the end of the function set rigidbody.velocity.
The problem is when you press jump you add velocity.

Just to say that you override the velocity after impulsing a force. Thus jump is totally hidden.

Just move the jump impulsion to the end of function.