Hello, just come to ask if anyone knows how to check to see if my GameObject (character) is falling?
using UnityEngine;
using System.Collections;
public class Movement : MonoBehaviour {
public float speed = 6.0f;
public float jumpSpeed = 20f;
bool grounded, interact; //bool for checking if player is grounded so they can jump, and bool for interact, so that player can only interact when in range of thing to interact with
public Transform jumpCheck, interactCheck; //transform variable for the end points of the linecasts
RaycastHit2D interacted; //a variable type that stores a collider that was hit during linecast
float jumpTime, jumpDelay = .5f; //jumpTime = 0 by default
bool jumped;
Animator anim;
void Start()
{
anim = GetComponent<Animator> ();
}
void Update()
{
PlayerController ();
RaycastStuff(); //call the function every frame
}
void RaycastStuff()
{
//Just a debug visual representation of the Linecast, can only see this in scene view! Doesn't actually do anything!
Debug.DrawLine(transform.position, jumpCheck.position, Color.magenta);
Debug.DrawLine(transform.position, interactCheck.position, Color.magenta);
//we assign the bool 'ground' with a linecast, that returns true or false when the end of line 'jumpCheck' touches the ground
grounded = Physics2D.Linecast(transform.position, jumpCheck.position, 1 << LayerMask.NameToLayer("background"));
}
void PlayerController()
{
anim.SetFloat("speed", Mathf.Abs(Input.GetAxis ("Horizontal"))); //setting the float parameter called "speed" depending on the input from the horizontal axis
if(Input.GetAxisRaw("Horizontal") > 0) // if d or right key is pressed
{
transform.Translate(Vector3.right * speed * Time.deltaTime); //move right 4 pixels at a fixed framerate
transform.eulerAngles = new Vector2 (0,0);
}
if(Input.GetAxisRaw("Horizontal") < 0) //if a or left key is pressed
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
transform.eulerAngles= new Vector2(0,180); //rotates gameobject by 180 degrees horizontally
}
if (Input.GetKeyDown (KeyCode.W) && grounded == true) // If the jump button is pressed and the player is grounded then the player jumps
{
rigidbody2D.AddForce(Vector2.up * 200f);
jumpTime = jumpDelay;
anim.SetTrigger ("Jump");
jumped = true;
}
jumpTime -= Time.deltaTime; //counts down in seconds
if (jumpTime <= 0 && grounded && jumped)
{
anim.SetTrigger ("Land");
jumped = false;
}
}
}
Thanks in advance
You could check the the velocity of your rigidbody2d.
if (rigidbody2D.velocity.y < -0.1)
{
isFalling = true;
}
else
{
isFalling = false;
}
This will cover not only jumping and then falling but falling off of a platform as well.
If you just want to check if it is falling after a jump then use this.
if (rigidbody2D.velocity.y < -0.1 && jumped)
{
isFalling = true;
}
else
{
isFalling = false;
}