[Solved] How to know if the object is moving upward or downward?


Assuming that the object has a rigidbody, you can use this in the update method (or anywhere for that matter) of a MonoBehavior attached to your GameObject.

Rigidbody rb = GetComponent<Rigidbody>();
float verticalVelocity = rb.velocity.y;

If you want the velocity along any axis, you can use the dot product:

Rigidbody rb = GetComponent<Rigidbody>();
Vector3 someAxisInWorldSpace = transform.forward;
float velocityAlongAxis = Vector3.Dot(rb.velocity, someAxisInWorldSpace); 

The above code would give you the velocity along the GameObject’s forward axis (the forward velocity).

If the object doesn’t have a rigidbody, you can save its old position in a variable and then compare it to the current position in the update loop.

Vector3 oldPosition;

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

private void Update() {
    Vector3 velocity = transform.position - oldPosition;
    float verticalVelocity = velocity.y / Time.deltaTime; // Divide by dt to get m/s
    oldPosition = transform.position;
}

3

solved How to know if the object is moving upward or downward?