'How to register a fall from height in unity 2D

So i'm working on a 2D game, first stage is a platformer so i'm trying to make it look nicer. I added a particle system with dust, so in case he falls down from height animation should be played. How do i register a fall from height to play the animation?



Solution 1:[1]

You can play animation on collision with the ground collider, when player's falling velocity is higher than 0. Using specific positive value may be nicer, cos it's gonna look like only achieving enough speed will spread dust.

Solution 2:[2]

I can see another way of doing this, but it takes more calculations:

To define the last position and current position of Y coordinates of the player.

If it is going down currentPos < lastPos If it is going up currentPos > lastPos

public GameObject player;
public GameObject particleDust;

Vector3 lastPos;
Vector3 currentPos;
float _time = 0;

private bool up = false;
private bool down = false;
private bool equal = false;

void Awake()
{
    lastPos = player.transform.position;
}

void Update()
{
    //assign player's position to current position
    currentPos = player.transform.position;


    //going up
    if (lastPos.y < currentPos.y)
    {
        up = true;
        down = false;
        equal = false;
    }
    //going down
    else if (lastPos.y > currentPos.y)
    {
        up = false;
        down = true;
        equal = false;
    }
    //same level
    else if (lastPos.y == currentPos.y)
    {
        equal = true;
    }


    if (down == true && equal == true)
    {
        particleDust.Play();
    }


    lastPos = currentPos;

}

You can define the up and down functions to define player's movement with bool.

When the direction down is True and lastPos = currentPos then it means that he was going down and he stopped because the player hit the ground.

I choose this option without using colliders because it can be versatile and be used on every level without adding new things.

I assume this will work but it need more things, i hope this will get you started.

(If i said something wrong please correct me , it help me improve too, thank you!)

Solution 3:[3]

Just thinking of how to detect falls from a specific height, I think this should work just fine in most cases:

private float startingHeight = 0.0f;
private bool grounded = true;
private bool landed = false;
//this is the distance the player needs to fall before dust shows up
private float fallingDist = 5.0f; 

private void Start()
{
    startingHeight = transform.position.y;
}

private void Update()
{
    if(grounded)    //set this to false when not colliding with the ground
    {
        startingHeight = transform.position.y;
    }
    else if(landed) //set this to true when hitting the ground while grounded is false
    {
        landed = false;

        if((startingHeight - transform.position.y) >= fallingDist)
        {
            //trigger dust particles or animation
        }
    }
}

Solution 4:[4]

Set your versionCode in defaultConfig of android/app/build.gradle. For example

defaultConfig {
    applicationId "com."
    minSdkVersion 21
    targetSdkVersion 30
    versionCode 132
    versionName "4.0.32"
    multiDexEnabled true
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 FreezeBee
Solution 2 Daniel Pirvu
Solution 3 Wopsie
Solution 4 Fahmida