Question by 
               joshlittle · Feb 02, 2017 at 10:46 PM · 
                controller2d-platformermovement script2d-physicsjumping  
              
 
              Can't control jumping while moving horizontally
Hello, I can't seem to fully control my 2D character's jump while moving horizontally. Sometimes it works perfect and other times, while moving (especially on slopes), it does not. The jump-only and move-only seem to work perfectly all the time but only sometimes when used together. I also notice that the character moves perfectly while in the air. Below is my code:
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerController : MonoBehaviour 
 
 {
     [SerializeField] private Transform[] groundPoints;
     [SerializeField] private float groundRadius;
     [SerializeField] private LayerMask groundObject;
     private Rigidbody2D playerRigidbody;
     private bool groundCheck;
     public bool jump;
     public float playerSpeed;
     public float jumpPower;
 
 
     void Start () {
         
         playerRigidbody = GetComponent<Rigidbody2D> ();
 
     }
 
 
     void FixedUpdate () {
         
         float horizontal = Input.GetAxisRaw("Horizontal");
         PlayerMovement(horizontal);
         groundCheck = GroundCheck();
         RestValues ();
     }
 
 
     private void PlayerMovement(float horizontal) {
 
         playerRigidbody.velocity = new Vector2(-1 * horizontal * playerSpeed, playerRigidbody.velocity.y);
         if (horizontal == 0.1) { playerSpeed = 0; }
         if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W)) { jump = true; }
         if (groundCheck && jump) 
             {
                 groundCheck = false;
                 playerRigidbody.AddForce(new Vector2(0, jumpPower));
             }
     }
 
     private bool GroundCheck () {
     
         if (playerRigidbody.velocity.y <= 0) 
             {
                 foreach (Transform point in groundPoints) 
                     {
                         Collider2D[] colliders = Physics2D.OverlapCircleAll(point.position, groundRadius, groundObject);
 
                         for (int i = 0; i < colliders.Length; i++) 
                             {
                                 if (colliders [i].gameObject != gameObject) 
                                 {
                                     return true;
                                 }
                             }
                     }
             }
         return false;
     }
 
     private void RestValues () {
 
         jump = false;
     }
 
 }
               Comment
              
 
               
              Your answer
 
 
             Follow this Question
Related Questions
Broken Jump Physics 0 Answers
Where is the Jump Input in the default 2d platform controller? 0 Answers
Trying to make 2D jumping arc 0 Answers
Player can only jump once!? 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                