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.

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

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.