Can you move a rigidbody without causing it to activate?

I’m trying to move a bunch of kinematic rigidbodies around (they also each have a collider attached). However, each time I move one, I see a drop in performance in the profiler. When not moved, the profiler says there are no active rigidbodies. However, as soon as I move one (or a group of them) it/they become active and there’s a performance drop.

All I want to do is shift their position over 1 frame. They don’t need to collide or interact with anything in the process. How do I do this without them activating and causing a drop in performance?

Moving such things causes PhysX (the underlying physics engine) to rebuild it’s broad-phase collision detection trees. It doesn’t matter if they aren’t colliding.

Try putting the RigidBody to sleep before you move it.

Rigidbodies can also be forced to
sleep using rigidbody.Sleep. This is
useful to start rigidbodies in a rest
state when loading a new level.

Taken from http://unity3d.com/support/documentation/Components/RigidbodySleeping.html

You could destroy your rigid body when you don’t need it, and then add it back when you need it again.

Destroy(rigidbody);

and when you need it back:

gameObject.AddComponent(Rigidbody);