[2D Platform Game] Precise Jumping Without Holding Down Directional Button.
First, thanks for answering my query. I tried looking up via google and Unity's Search feature for a similar issue to my own, unfortunately with no success. In my game I want to give the player precise jumping controls so that when they hold down the jump button their character stops in place, they can choose a direction to jump in from among five choices (which will be shown via arrows around the character) using either the left stick, arrow keys, or d-pad, and they'll jump in that direction regardless of if they're inputting said direction via button. I'm using Input.GetAxis(“Horizontal”) to govern which choice was made. Now the problem I have is that:
When I run the following code it crashes Unity
If I run the following code without the while loop the game requires my holding down a directional button after releasing the jump button in order to jump in that direction.
The first problem is true whether I put the code in the Update, LateUpdate, or FixedUpdate function. Can anyone on here show me how to correct this issue or direct me to someone who would know?
/**This Script controls all of the character movement.
*/
using UnityEngine;
using System.Collections;
public class PlayerCharacterController : MonoBehaviour {
//Other variables.
public float maxSpeed = 10f;
public float JumpForce = 1500f;
public bool facingRight = true;
void FixedUpdate ()
{
MovementMechanic();
JumpMechanic();
}
void Update(){
PauseMechanic();
}
void MovementMechanic(){
// Moving Mechanics (Left and Right)
float move = Input.GetAxis("Horizontal");
GetComponent<Rigidbody2D>().velocity =
new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
}
void JumpMechanic(){
float restartMove = Input.GetAxis("Horizontal");
float jumpDirectionX = Input.GetAxis("Horizontal");
float chosenDirection = 10.0f;
bool isChoosing = false;
if(Input.GetButtonDown("Jump")){
isChoosing = true;
}
do{
if( Input.GetButtonDown("Jump"))
GetComponent<Rigidbody2D>().velocity = new Vector2(0f, 0f);
while( Input.GetButton("Jump") ){
//Jump Right
if( jumpDirectionX > 0 && Input.GetButton("Jump")){
Debug.Log("You Jumped Right.");
chosenDirection = 1.0f;
}
//Jump Left
else if( jumpDirectionX < 0 && Input.GetButton("Jump")){
Debug.Log("You Jumped Left.");
chosenDirection = -1.0f;
}
//Jump Up
else if( jumpDirectionX == 0 && Input.GetButton("Jump") ){
Debug.Log("You Jumped");
chosenDirection = 0f;
}
else{
Debug.Log("You're pressing nothing");
;
}
}
}while( Input.GetButton("Jump") );
if(Input.GetButtonUp("Jump")){
GetComponent<Rigidbody2D>().velocity =
new Vector2(restartMove * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
GetComponent<Rigidbody2D>().AddForce(new Vector2(chosenDirection, JumpForce));
}
}
void PauseMechanic(){
//Pause Feature (By pressing P)
if (Input.GetKeyDown(KeyCode.P)){
if (Time.timeScale == 1)
Time.timeScale = 0;
else
Time.timeScale = 1;
}
}
}
Your answer
Follow this Question
Related Questions
2D-Platformer wrong jumps 0 Answers
Help with enemy AI Please! (on 2D Platformer) 0 Answers
Help with Player Jumping Script In 2D Platformer (C#) 1 Answer
Help making my 2D platformer character jump? 0 Answers
How do I make my player jump at a fixed height, and only once until he touches the ground again? 1 Answer