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?