Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

c# - How to know if the object is moving upward or downward?

I have a gameobject and I would like to find out if the object is moving upward (positive) or downward (negative). How do I get to do this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...