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:

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);

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);