- Home /
Rigidbody Local Velocity
Hey all the Unity Pro´s i have a little problem with my rigidbody´s velocity. look
I want to say, hey rigidbody of target, if you enter the trigger i want that you slow down your velocity at your local x axis. so i tryd this: http://answers.unity3d.com/questions/404420/rigidbody-constraints-in-local-space.html
but its not working. The rigidbody slows down yes, but on its global x axis and this is the problem. Sees anyone my mistake?
Thank - Youuu
void OnTriggerEnter (Collider target) {
if (target.tag == "Car" || target.tag == "AI" || target.tag == "Destructable") {
if (NeedForceToBreak == true) {
if(target.attachedRigidbody.velocity.magnitude >= min_Velocity){
localVelocity = target.attachedRigidbody.transform.InverseTransformDirection(target.attachedRigidbody.velocity);
localVelocity.z = target.attachedRigidbody.velocity.z;
localVelocity.y = target.attachedRigidbody.velocity.y;
localVelocity.x = target.attachedRigidbody.velocity.x - StopVelocityForce;
target.attachedRigidbody.velocity = transform.TransformDirection (localVelocity);
StaticObject.SetActive (false);
ObjectWPhysics.SetActive (true);
Trigger.SetActive (true);
Answer by Bunny83 · Sep 18, 2017 at 02:50 PM
Those lines make not much sense:
localVelocity.z = target.attachedRigidbody.velocity.z;
localVelocity.y = target.attachedRigidbody.velocity.y;
localVelocity.x = target.attachedRigidbody.velocity.x - StopVelocityForce;
First of all you overwrite all 3 values inside localVelocity, so it would be what you did before to the variable. Also you overwrite the velocity which is in local space with the worldspace velocity of the "target" rigidbody.
Next thing is you subtract "StopVelocityForce" from the x component. However that does not necessarily "brake" or or slow down. If the velocity is currently to the "local left" side you would actually speed up into that direction.
Finally you convert the velocity which now contains a world space velocity from local space to world space again. That means the result is complete nonsense.
You probably want something like this:
Rigidbody rb = target.attachedRigidbody;
localVelocity = rb.transform.InverseTransformDirection(rb.velocity);
localVelocity.x *= 0.5f; // cut sideways speed in half
rb.velocity = rb.transform.TransformDirection (localVelocity);
Your answer
Follow this Question
Related Questions
Change velocity direction 1 Answer
Velocity powered rigidbody on a moving platform without parenting. 3 Answers
Rigid Body relative speed 1 Answer
How can I convert velocity/direction to Force? 3 Answers
Throwing knife goes straight 1 Answer