- Home /
How make player move in the air until they hit the ground?
Hello guys, i am making a platformer game where the player moves and jumps. Now, my issue is that I want the player to move in the direction they press when in the air( When Boolean grounded == false) and remain moving in that direction until they hit the ground at which point they resume control of ground controls. i tried loops but they only make the Unity Editor crash. My movement script snippet is as follows: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx if(grounded == true) { if(Input.GetAxis("move") > 0) { transform.Translate(0,0,speed * Time.deltaTime); transform.localScale = Vector3(1,1,1); } } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx So my request is to get help on making code that will be executed when Grounded == false && when the user presses a key to move left or right. Thanks in advance :)
Answer by KittenSnipes · Jan 15, 2018 at 10:20 AM
@Timothy-Morales Here is my code :D. Maybe you could make use of it.
public float jumpForce = 100;
public float speed = 10;
public KeyCode key = KeyCode.Space;
bool grounded;
bool canDoubleJump;
Rigidbody2D rb;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
float moveHorizontal = Input.GetAxis("Horizontal");
//Store the current vertical input in the float moveVertical.
float moveVertical = Input.GetAxis("Vertical");
//Use the two store floats to create a new Vector2 variable movement.
Vector2 movement = new Vector2(moveHorizontal, moveVertical);
//Call the AddForce function of our Rigidbody2D rb2d supplying movement multiplied by speed to move our player.
rb.AddForce(movement * speed);
if (Input.GetKeyDown(key))
{
if (grounded)
{
rb.velocity = new Vector2(rb.velocity.x, 0);
rb.AddForce(new Vector2(0, jumpForce));
canDoubleJump = true;
Debug.Log("Jump1: Working!");
}
else
{
if (canDoubleJump)
{
canDoubleJump = false;
rb.velocity = new Vector2(rb.velocity.x, 0);
rb.AddForce(new Vector2(0, jumpForce));
Debug.Log("Jump2: Working!");
}
}
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (other.transform.tag == "Floor")
{
grounded = true;
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (other.transform.tag == "Floor")
{
grounded = false;
}
}
Answer by Timothy-Morales · Jan 15, 2018 at 08:15 PM
Thanks @KittenSnipes.I will study your code and see what i can come up with. Thumbs up dude :)