- Home /
Jumping with raycasts causing issues?
I have the following code which handles jumps and double jumps:
 void JumpingControls()
 {
     //If space is pressed and isGrounded
     if (Input.GetButtonDown("Jump"))
     {
         if (isGrounded && !attacking)
         {
             animate.SetBool("Jump", true);
 
             //set grounded to false
             isGrounded = false;
 
             //Apply jumpForce upward
             GetComponent<Rigidbody>().AddForce(Vector3.up * jumpForce, ForceMode.VelocityChange);
 
             //allowed to double jump
             doubleJump = true;
 
         }
         else
         {
             if (doubleJump)
             {
                 animate.SetTrigger("Double");
                 //not allowed to double jump
                 doubleJump = false;
 
                 //Apply jumpForce upward
                 GetComponent<Rigidbody>().AddForce(Vector3.up * jumpForce, ForceMode.VelocityChange);
             }
         }
     }
 }
 
 void CheckIfGrounded()
 {
     if (isGrounded)
     {
         animate.SetBool("Jump", false);
         doubleJump = false;
     }
 }
This code works great when I am detecting if I am grounded or not, but only with this collision code:
 void OnCollisionEnter(Collision col)
 {
     if (col.contacts.Length > 0)
     {
         ContactPoint contact = col.contacts[0];
         if (Vector3.Dot(contact.normal, Vector3.up) > 0.5f)
         {
             isGrounded = true;
         }
         else
             isGrounded = false;
     }
 }
But there is issues with this code, if i collide with most things, it sets my isGrounded script to false, which doesnt allow me to jump, so I want to handle jump using a raycast pointing down from my feet but the issue is when I jump with the raycast code, it exits the Jump state immediately and doesn't allow me to double jump even though it detects that I am not grounded correctly.
I need a second pair of eyes on this because I am stumped, any help appreciated, here is the raycast code:
 void DetectCollision()
 {
     RaycastHit hit;
     float dist;
     Vector3 dir;
 
     dist = 1.5f;
     dir = new Vector3(0, -1, 0);
 
     //edit: to draw ray also//
     Debug.DrawRay(transform.position + new Vector3(0, 1.0f, 0), dir * dist, Color.green);
     //end edit//
 
     if (Physics.Raycast(transform.position + new Vector3(0, 1.0f, 0), dir * dist, out hit, dist))
     {
         isGrounded = true;
     }
     else
     {
         isGrounded = false;
     }
 }
Answer by JayFitz91 · Aug 17, 2015 at 05:31 PM
I manage to fix it, i must have had conflicting lines of code somewhere, but I converted everything into one function which checks if I am colliding and it works now.
Here is the code I am using:
 void JumpingControls()
 {
     RaycastHit hit;
     float dist;
     Vector3 dir;
 
     dist = 1.5f;
     dir = new Vector3(0, -1, 0);
 
     //If space is pressed and isGrounded
     if (Input.GetButtonDown("Jump"))
     {
         if (isGrounded && !attacking)
         {
 
             //set grounded to false
             isGrounded = false;
 
             //Apply jumpForce upward
             GetComponent<Rigidbody>().AddForce(Vector3.up * jumpForce, ForceMode.VelocityChange);
 
             //allowed to double jump
             doubleJump = true;
 
         }
     }
 
     if (Physics.Raycast(transform.position + new Vector3(0, 1.0f, 0), dir * dist, out hit, dist))
     {
         isGrounded = true;
         animate.SetBool("Jump", false);
     }
     else
     {
         isGrounded = false;
         animate.SetBool("Jump", true);
 
         if (Input.GetButtonDown("Jump") && doubleJump)
         {
             animate.SetTrigger("Double");
             //not allowed to double jump
             doubleJump = false;
 
             //Apply jumpForce upward
             GetComponent<Rigidbody>().AddForce(Vector3.up * jumpForce, ForceMode.VelocityChange);
         }
     }   
 }
Answer by Lemonade · Aug 17, 2015 at 10:42 AM
I think the problem is you are offsetting the origin of the Raycast.
 transform.position + new Vector3(0, 1.0f, 0)
If you move it out of the object it could hit its own collider. However if you are sure that the origin did not move out of the collider I would try to turn off all colliders around except ground collider and debug what your method returns.
I have his collider set to ignore raycasts so i don't think that's the issue, but I tried it just to be sure, and still the same issue, I moved the collider up as a check like so but still the issue persists unfortunately

Your answer
 
 
             Follow this Question
Related Questions
Physics2D Raycast stops detecting collision 0 Answers
edit a variable as a result of a collision 0 Answers
character jump on collision with a box 0 Answers
Custom Collision Detection 4 Answers
Collision Detection If Raycast Source Is inside A Collider? 4 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                