- Home /
Detect Falling
Hi, I am currently working on a character that is jumping and managed to make the animations play when it is jumping, but the problem is that now I would like to detect when the character is falling so that the animation can change in time. Is there anyway to detect if it is moving "negatively" on Y or something like that?
Jumping Code:
public Animator Runner_Controller;
private bool touchingPlatform;
private Vector3 startPosition;
void Start () {
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
GameEventManager.GameWin += GameWin;
startPosition = transform.localPosition;
gameObject.SetActive(false);
Runner_Controller.SetBool("Jumping",false);
}
void Update () {
if(Input.GetButtonDown("Jump")){
if(touchingPlatform){
rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
Runner_Controller.SetBool("Jumping",true);
touchingPlatform = false;
}
You can check if rigidbody.velocity.y < 0.0. You might have to put a bit of a buffer in there...check if it is less than -0.1 for example.
you can check the velocity indeed but don't forget to check if you're grounded or not ^^. because if you're in a slope the velocity will be the same kind a value than during a falling.
Answer by L_Artista · Jan 06, 2016 at 09:25 AM
void LateUpdate{
currentheight = transform.position.y
travel = currentheight - previousheight
//your code
previousheight = currentheight
}
//if you are using rigidbody use lateupdate else if Update if your directly changing transform.position
Thanks, I used something like this a long time ago, thanks for replying.
Answer by KungKras · Jan 07, 2016 at 01:02 PM
It's a good idea to raycast down in an 'IsGrounded()' function. Then when IsGrounded() returns false, you can play the falling animation. Just checking the y-velocity could be misleading if you're gonna move down slopes.
Answer by ForeignGod · Jan 06, 2016 at 10:56 AM
First off, i don't use C# so this might be correctly coded, but in theory this idea should work. This is written here and now and isn't tested at all, just to get you thinking.
using UnityEngine;
using System.Collections;
public class MYCLASSNAME : MonoBehaviour {
velY : Float;
falling : Boolean;
void Start (){
velY = rigidbody.velocity.y;
}
void Update (){
if(velY >= 0){
falling = true;
}
if(velY == 0){
falling = false;
}
}
Your answer
Follow this Question
Related Questions
Adding Jumping and Falling Animations 0 Answers
fall animation triggered via rigidbody velocity 0 Answers
How would you go about making falling leaves? 1 Answer
Another Slow Fall Problem... 2 Answers
Sword animation when falling 2 Answers