Wall jumping problem

Hey guys!

Im having an issue I hope you can help me out with,
currently I’m making a game that has a ball that you can control and jump.
The problem is that when I jump on a wall it glides all the way up!

I tried using tags for the ground and such but that does not help as there will be obstacles
you must jump over so you can still glide over those.

I also tried to use a character controller, but this just broke the entire thing and it just floats there?

The object I’m trying to control has the attached script, a rigidbody and sphere collider

Thanks for taking a look at my problem!

-mike

var power = 50.0;  //speed of the ball
var drag = 2.0; //how much to slow down when not controlling
private var grounded = false; 
var once = 0;  //var to set the direction of ball jump only once
var jumpForce;  //var to set how high the ball should bounce

function FixedUpdate () {
 // Only apply forces if the ball is on the floor
 if (grounded) {
  // Calculate the direction in which we want to roll the ball
  // * It is relative to the camera
  // * we remove the y component because we really want to apply forces only on the 2D plane
  var forward = Camera.main.transform.TransformDirection(Vector3.forward);
  forward.y = 0;
  forward = forward.normalized;

  // Scale the force by the users input and apply it to the rigidbody
  var forwardForce = forward * Input.GetAxis("Vertical") * power;
  rigidbody.AddForce(forwardForce);
  
  // Calculate the direction in which we want to roll the ball
  // * It is relative to the camera
  // * we remove the y component because we really want to apply forces only on the 2D plane
  var right = Camera.main.transform.TransformDirection(Vector3.right);
  right.y = 0;
  right = right.normalized;

  // Scale the force by the users input and apply it to the rigidbody
  var rightForce = right * Input.GetAxis("Horizontal") * power;
  rigidbody.AddForce(rightForce);
  
  //this sets the direction of force to be applied when jumping
  if (once==0){
		jumpForce =  rigidbody.transform.TransformDirection(Vector3.up);
		once = 1;
	}
	
	//jump
  if (Input.GetAxis("Jump")&&once==1){
		rigidbody.AddForce(jumpForce*35);
	}
	
  // Apply drag only if the user is not pressing any keys
  if (Mathf.Approximately (Input.GetAxis("Horizontal"), 0) && Mathf.Approximately(Input.GetAxis("Vertical"), 0))
   rigidbody.drag = drag;
  else
   rigidbody.drag = 0; 
 }
 // Every frame set grounded to false. OnCollisionStay will enable it again if
 // the rigidbody collides with anything
 grounded = false;
}

 function OnCollisionStay(collision:Collision) {
if(collision.gameObject.tag=="ground") {
 grounded = true;
 }
}

Sadly I don’t have the code right now, but I solved this by shooting a ray and checking surface angle and then performing stuff according to what angle it got.