'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 |
