recalibrate players Y
I got this script from the forums and modified it a bit to fit my needs. So if the player falls a certain distance, it triggers the" falling" loop animation where the player flails around, and when he hits the ground, it triggers a recoil animation of him landing. that works fine, but when I then try to move the player , the fall loop plays again. I think what is happening is that the script still sees I have fallen that amount to trigger the fall loop again. I need to somehow make the players new Y position after the fall the new zero...that is to say somehow reset that value so the script understands that the new y position is now the starting point for future falls. the "crashenabled" part in the script means that if the player falls far enough that a triggerzone becomes active on the ground which kills him. That works fine because he is dead, the problem is when he falls far enough to trigger the fall loop but not far enough to die
using UnityEngine;
public class newFallCode : MonoBehaviour
{
public float fallingThreshold = 1f;
public float maxFallingThreshold = 20f;
private float initialDistance = 0f;
private RaycastHit hit;
private Animator anim;
private BoxCollider boxCollider;
GameObject crashland;
void Start()
{
boxCollider = GameObject.Find ("crashland").GetComponent<BoxCollider>();
var dist = 0f;
GetHitDistance(out dist);
initialDistance = dist;
anim = GetComponent <Animator>();
}
bool GetHitDistance(out float distance)
{
distance = 0f;
Ray downRay = new Ray(transform.position, -Vector3.up); // this is the downward ray
if (Physics.Raycast(downRay, out hit))
{
distance = hit.distance;
return true;
}
return false;
}
void Update()
{
var dist = 0f;
if (GetHitDistance(out dist))
{
if (initialDistance < dist)
{
//Get relative distance
var relDistance = dist - initialDistance;
//Are we actually falling?
if (relDistance > fallingThreshold)
{
//How far are we falling
if (relDistance > maxFallingThreshold)
Debug.Log("Fell off a cliff");
else anim.SetTrigger ("Falling");
//boxCollider.enabled = true;
//How far are we falling
if (relDistance > maxFallingThreshold)
Debug.Log("crashenabled");
else boxCollider.enabled = true;
}
}
}
else
{
//anim.SetTrigger ("Falling");
Debug.Log("Infinite Fall");
}
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612085846im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
player falls slowly 0 Answers
If button is not pressed fall. 2 Answers
Animating scripted jumping 1 Answer
falling script flaws 0 Answers
Why do I fall really far when I collide with something? 0 Answers