- Home /
Check if a rigidbody has stopped moving for several frames.
Hi everyone, I'm having an issue where I need to record the position of an object after it has stopped moving for a time.
I'm currently using (javascript)
function FixedUpdate () {
if (rigidbody.velocity.magnitude == 0) {
lastPos = transform.position;
}
};
I've noticed that this is unreliable as sometimes when the object bounces off something, it will record the position as if it were stopped, and sometimes the object can end up moving inperceptibly slowly which stops the position being recorded.
I've had some people suggest using: if (rigidbody.IsSleeping()) {
but doing so causes an error: 'UnityEngine.Rigidbody' is required to access non static member 'IsSleeping'.
I really need a way to check the velocity has maintained 0 or <0.1 for a few frames.
I'm still fairly new to scripting in unity so I’m sorry if I've missed something simple.
Thanks in advance.
Answer by sparkzbarca · Jan 24, 2013 at 05:26 PM
the is sleeping should work.
Based on the error are you not inside a monobehavior?
post the ENTIRE code. I know its annoying but basically the issue is for some reason at that line unity rigidbodies dont seem to exist.
I'd guess its because your outside monobehavior
OR
your outside the right game object. That is "this" is not equal to a game object with a rigidbody
OR
you actually typed Rigidbody not rigidbody. While rigidbody refers to the items actual rigidbody instance. Rigidbody refers to the class.
you actually type
I had indeed typed Rigidbody and not rigidbody, been following what $$anonymous$$onodevelop prompts when typing I wasnt aware there was a difference.
I'm now using:
if ((gameObject.rigidbody.IsSleeping) && (rigidbody.velocity.magnitude == 0))
which works as intended, thankyou very much for your help.
Answer by itskarma · Mar 13, 2015 at 06:02 PM
Maybe your object is rotating. Try to Freeze rotation or Increase the Angular Drag. If it still doesn't work,keep an eye on object if its position & rotation is changing or not.