Question by
adude172 · Sep 24, 2018 at 02:50 AM ·
2d2d-platformerjumpjumpingplatformer
Jumping on enemies help
I'm trying to make a platformer with no jumping except for landing on enemies heads. It currently works but the jumping is sorta broken: if I am moving when I hit an enemy, the player will sometimes jump really low, sometimes a medium height, and sometimes really really high. See this gif for an example.
How can I make it more consistent? Here's the script I'm using for my Player, there is a blank GameObject as a child which I check for the ground layer with:
using System.Collections; using UnityEngine.SceneManagement;
public class Player : MonoBehaviour {
[HideInInspector] public bool jump = false; //used later for jump detect
public float Speed = 365f; //controls speed of player
public float jumpForce = 1000f; //controls how forceful jumps are
public Transform groundCheck; //gameobj thats used later for checking if touching ground
private bool grounded = false; //used for groundcheck
private Rigidbody2D rb2d; //name for rigidbody2d attached, used later for physics stuffs
private SpriteRenderer spriteRenderer; //renderer attached
//Animator Animator; //used to control animations!
void Start ()
{
//Animator = GetComponent<Animator> (); //calls an Animator component called Animator
}
// Use this for initialization
void Awake ()
{
rb2d = GetComponent<Rigidbody2D>(); //calls rigidbody2d component called rb2d
//Animator = gameObject.GetComponent<Animator>(); //calls an Animator component called Animator
}
// Update is called once per frame
void Update ()
{
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Enemy")); //defines what grounded is: a gameobj that casts a line at its current pos that checks if the player is touching a layer called "Ground", what my floor is made out of.
if (grounded) //can only jump if grounded is true, basically if is touching floor
{
jump = true;
}
if (Input.GetKey (KeyCode.R))
SceneManager.LoadScene (SceneManager.GetActiveScene ().buildIndex - 0);
}
void FixedUpdate()
{
float Dirx = Input.GetAxis ("Horizontal") * Speed * Time.deltaTime; //dirx is left or right depending on what on the x axis is pressed, a or left for left, and d or right for right.
transform.position = new Vector2 (transform.position.x + Dirx, transform.position.y); //this transforms (moves) the player in the dir specified by dirx, and takes the speed from dirx too.
if (jump)
{
rb2d.AddForce(new Vector2(0f, jumpForce)); //adds a force to the rigidbody, multiplied by jumpforce.
jump = false; //can't jump right after jumping, until touching floor again.
}
} }
Any ideas? I'm new to unity, any help would be great, thanks!
Comment