private void InheritVelocity(Transform collideObject, ref Vector2 normalForce)
    {
        PhysicsHolder physics = collideObject.GetComponent <PhysicsHolder>();

        if (physics == null)
        {
            return;
        }

        normalForce = normalForce.normalized * (normalForce.magnitude + Vector3.Project(physics.velocity, normalForce.normalized).magnitude);

        Vector2 forceInDirection = Vector3.ProjectOnPlane(velocity - physics.velocity, normalForce.normalized);

        Vector2 friction = -forceInDirection.normalized * normalForce.magnitude * physics.staticFriction;

        if (friction.magnitude > forceInDirection.magnitude)
        {
            friction = friction.normalized * forceInDirection.magnitude;
        }

        velocity += friction;
    }
 public void ChangePhysics(bool value)
 {
     for (int i = 0; i < Bodies.Length; i++)
     {
         PhysicsHolder holder = Bodies[i];
         if (holder.Collider)
         {
             holder.Collider.enabled = value;
         }
         if (holder.Joint)
         {
             holder.Joint.enableCollision     = false;
             holder.Joint.enablePreprocessing = false;
             holder.Joint.enableProjection    = value;
         }
         if (holder.Body)
         {
             holder.Body.isKinematic = !value;
             holder.Body.useGravity  = value;
         }
     }
 }