- Home /
Android double jump not working correctly
Hey guys, I have a double jump I made for my game. It does work, but the problem I'm having is, when I press screen to jump it's ignoring my bool and just double jumping instead of jumping then pressing screen again to jump.
Pretty much what I'm trying to do is -
Press screen to jump > press screen again to jump higher.
What it's doing is just doing both at once giving off one big jump.
Here is my code, hope y'all can diagnose what I am doing wrong.
using UnityEngine;
using System.Collections;
public class Controls : MonoBehaviour {
// Variables dealing with Speed and boost.
public float speed;
public float sideSpeed = 1.0f;
public float jumpSpeed = 50.0f;
public bool canJump = false;
public bool doubleJump = false;
void Start(){
}
// Update is called once per frame
void Update () {
//Use this for constant forward movement
transform.Translate (Vector3.forward * speed * Time.deltaTime);
if (doubleJump) {
if (Input.GetMouseButtonDown (0)) {
rigidbody.velocity += jumpSpeed * Vector3.up;
doubleJump = false;
}
}
}
void FixedUpdate(){
Vector3 force = new Vector3 (Input.acceleration.x, 0, 0) * sideSpeed;
rigidbody.AddForce (force);
if (Input.GetMouseButtonDown (0) && canJump == true) {
rigidbody.velocity += jumpSpeed * Vector3.up;
canJump = false;
if (!canJump) {
doubleJump = true;
}
}
}
void OnCollisionEnter(Collision col){
if (col.gameObject.tag == "Map") {
canJump = true;
doubleJump = false;
}
}
}
I moved if(doubleJump) into fixed update that still didn't help.
Answer by james_170482 · Nov 02, 2014 at 12:50 AM
try to pick out what i have changed, untested code but you may get an idea. i added a time to make sure you dont double jump if too much time has passed also changed the input function because it was instantly jumping again. sorry the code is not formatted the page is not letting me. the code could be written better but i dont have time to rewrite it all at the moment for you.
using UnityEngine;
using System.Collections;
public class Controls : MonoBehaviour {
// Variables dealing with Speed and boost.
public float speed;
public float sideSpeed = 1.0f;
public float jumpSpeed = 50.0f;
public bool canJump = false;
public bool doubleJump = false;
public float maxjumptime = 0f;
void Start(){
}
// Update is called once per frame
void Update () {
if( doublejump && maxjumptime > 0)
{
maxjumptime -= time.deltatime;
}
if( maxjumptime < 0 )
{ maxjumptime = 0; }
//Use this for constant forward movement
transform.Translate (Vector3.forward * speed * Time.deltaTime);
if (doubleJump && maxjumptime > 0 ) {
if (Input.GetMouseButtonDown (0)) {
rigidbody.velocity += jumpSpeed * Vector3.up;
doubleJump = false;
}
}
}
void FixedUpdate(){
Vector3 force = new Vector3 (Input.acceleration.x, 0, 0) * sideSpeed;
rigidbody.AddForce (force);
if (Input.GetMouseButtonDown (0) && canJump == true) {
rigidbody.velocity += jumpSpeed * Vector3.up;
if( maxjumptime > 0 )
{ canJump = false; doublejump = true; } maxjumptime = 1.5f;
if (Input.GetMouseButtonDown (0) && maxjumptime > 0 ) {
doubleJump = true;
}
}
}
void OnCollisionEnter(Collision col){
if (col.gameObject.tag == "Map") {
canJump = true;
doubleJump = false;
}
}
}
Your answer
Follow this Question
Related Questions
Make an object move in the direction of touch 0 Answers
Swipe menu, problem! 0 Answers
(Mobile) Touch anywhere on screen EXCEPT button 3 Answers
A node in a childnode? 1 Answer
Mobile Graphics Settings in Menu 1 Answer