- Home /
My player wont jump
My player wont jump when i click space and I put space as the jump button
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; public class Player : MonoBehaviour { // Config [SerializeField] float runSpeed = 5f; [SerializeField] float jumpSpeed = 5f; [SerializeField] float climbSpeed = 5f; [SerializeField] Vector2 deathKick = new Vector2(25f, 25f); // State bool isAlive = true; // Cached component references Rigidbody2D myRigidBody; Animator myAnimator; CapsuleCollider2D myBodyCollider; BoxCollider2D myFeet; float gravityScaleAtStart; // Message then methods void Start() { myRigidBody = GetComponent(); myAnimator = GetComponent(); myBodyCollider = GetComponent(); myFeet = GetComponent<BoxCollider2D>(); gravityScaleAtStart = myRigidBody.gravityScale; } // Update is called once per frame void Update() { if (!isAlive) { return; } Run(); ClimbLadder(); Jump(); FlipSprite(); Die(); } private void Run() { float controlThrow = CrossPlatformInputManager.GetAxis("Horizontal"); // value is betweeen -1 to +1 Vector2 playerVelocity = new Vector2(controlThrow * runSpeed, myRigidBody.velocity.y); myRigidBody.velocity = playerVelocity; bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > Mathf.Epsilon; myAnimator.SetBool("Running", playerHasHorizontalSpeed); } private void ClimbLadder() { if (!myFeet.IsTouchingLayers(LayerMask.GetMask("Climbing"))) { myAnimator.SetBool("Climbing", false); myRigidBody.gravityScale = gravityScaleAtStart; return; } float controlThrow = CrossPlatformInputManager.GetAxis("Vertical"); Vector2 climbVelocity = new Vector2(myRigidBody.velocity.x, controlThrow * climbSpeed); myRigidBody.velocity = climbVelocity; myRigidBody.gravityScale = 0f; bool playerHasVerticalSpeed = Mathf.Abs(myRigidBody.velocity.y) > Mathf.Epsilon; myAnimator.SetBool("Climbing", playerHasVerticalSpeed); } private void Jump() { if (!myFeet.IsTouchingLayers(LayerMask.GetMask("Ground"))) { return; } if (CrossPlatformInputManager.GetButtonDown("Jump")) { Vector2 jumpVelocityToAdd = new Vector2(0f, jumpSpeed); myRigidBody.velocity += jumpVelocityToAdd; } } private void Die() { if (myBodyCollider.IsTouchingLayers(LayerMask.GetMask("Enemy"))) { isAlive = false; myAnimator.SetTrigger("Dying"); GetComponent().velocity = deathKick; } } private void FlipSprite() { bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > Mathf.Epsilon; if (playerHasHorizontalSpeed) { transform.localScale = new Vector2(Mathf.Sign(myRigidBody.velocity.x), 1f); } } }
Your answer
Follow this Question
Related Questions
Jump animation only plays for about 1/10 of a second unless the button is pressed twice 2 Answers
Jumping with ridget body and OnEnterTrigger 1 Answer
attached.Rigidbody isn't working with a ChactacterController? -1 Answers
Rigidbody.Addforce makes object skip 5 Answers
Solved: How to know if an object collides with anything at all? (Jumping issue) 1 Answer