- Home /
Making a rigidbody stick to its position
When a collision with a collider happens, it's possible to detect velocity magnitude and trigger an event.
function OnCollisionEnter(collision : Collision) {
if (collision.relativeVelocity.magnitude > 2){
...
}
}
How can I tell the attached rigidbody not to move when the magnitude is below that value?
Answer by runevision · Nov 06, 2009 at 09:28 AM
Rigidbodies are controlled by physics (unless they have the isKinematic flag). This means that the physics system will decide whether the Rigidbody will move or not.
If you want to have control yourself over when it moves or doesn't move, you have a few choices.
You can make the Rigidbody kinematic, and only turn isKinematic off when you want it to move. Since it will probably be kinematic in the moment of the collision, you may need to apply a force to the Rigidbody yourself to make it move.
You can have the Rigidbody be physics controlled all the time, but overwrite its position and velocity when it has moved and you didn't want it to. Just store variables with the position and velocity before the collision, and if the collision impact was not big enough, set the position and velocity after the collision to the stored values.
There may be other ways to do it, but those are the ones I could think of off the top of my head.
Answer by flaminghairball · Nov 08, 2009 at 08:54 PM
I guess you could also try manually setting the rigidbody velocity if the impact isn't strong enough, which at least works better in theory than manually setting position.
Just my two cents
Answer by $$anonymous$$ · Nov 08, 2009 at 09:35 PM
I'm not sure this will work, but you can try calling rigidbody.Sleep().
Alternatively, if you're just trying to control the level of bounciness, you can tweak the bounciness value in the physics materials.
Calling rigidbody.Sleep () will allow the physics system to disregard the rigidbody for calculations until it becomes relevant again. However, you'll need to stop the rigidbody first by setting velocity to zero or the rigidbody will just jump straight back into action.
Answer by kitt.du · Nov 17, 2009 at 12:01 AM
You could have a placeholder Trigger (Box Collider) which upon Collision would or would not initiate a Prefab object in it's place (perhaps the trigger Collider would be larger than your Prefab Object) depending on the magnitude of the collision.?? That might work.