Need help with Character Jump!
Before I had the run and jump coding as force and it was working fine, but now I decided to change the running to be moved by velocity and my character won't jump anymore. I didn't even touch the jump code, I left it at velocity since it was working fine in the past. Help?
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public LevelController theLevelController;
private bool jump, left, right, shoot;
private bool inJump;
public bool moving;
private Rigidbody2D playerRigidbody;
public float YJumpForce;
public float XHorizontalForce;
private Vector2 jumpForce;
private Vector2 horizontalForce;
Animator anim;
// Use this for initialization
void Start () {
jump = left = right = false;
inJump = false;
playerRigidbody = GetComponent<Rigidbody2D> ();
playerRigidbody.freezeRotation = true;
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
jump = Input.GetKeyDown (KeyCode.UpArrow);
left = Input.GetKey (KeyCode.LeftArrow);
right = Input.GetKey (KeyCode.RightArrow);
shoot = Input.GetKey (KeyCode.Space);
}
void FixedUpdate () {
//Jump
jumpForce = new Vector2 (0, YJumpForce);
if (jump && !inJump) {
inJump = true;
StartCoroutine (disableJump ());
playerRigidbody.AddForce (jumpForce, ForceMode2D.Impulse);
anim.SetBool ("Jump", true);
}
//Shooting
if (shoot) {
anim.SetBool ("Shoot", true);
} else {
anim.SetBool ("Shoot", false);
}
//Movement
if (left && !inJump) {
moving = true;
playerRigidbody.velocity = new Vector2 (-XHorizontalForce, 0);
if (transform.localScale.x > 0) {
flip ();
}
} else if (right && !inJump) {
moving = true;
playerRigidbody.velocity = new Vector2 (XHorizontalForce, 0);
if (transform.localScale.x < 0) {
flip ();
}
} else if (!inJump) {
moving = false;
} else {
playerRigidbody.velocity = new Vector2 (0f, 0f);
}
if (moving==true) {
anim.SetBool ("Run", true);
} else {
anim.SetBool ("Run", false);
}
}
void flip()
{
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
IEnumerator disableJump()
{
yield return new WaitForSeconds(2);
inJump = false;
anim.SetBool ("Jump", false);
}
}
Comment
ins$$anonymous$$d of using 0 for the y parameter in your move velocity use the existing y from the velocity.
Try replacing playerRigidbody
with, this.transform.Translate(jumpForce);
If this works for you, you may find that your character doesn't come back down. You'll need a negative force for jumpForce
such as a gravity variable.