I have two identical pucks (think air hockey paddles). Each is a rigidbody. I can move a puck around by clicking and dragging it. In order to have 1:1 input response, when you start dragging a puck I set isKinematic=true and move it with the cursor using RigidBody.MovePosition. When you release the mouse button, I set isKinematic=false and let normal physics take over.
I wanted to be able to push one puck around by dragging the other one into it, which means using a kinematic rigidbody to push a non-kinematic rigidbody around. That's not so bad: I used RigidBody.SweepTest to check the move I'm about to make. If that test hits another puck, I apply a force to that puck in the direction of the drag.
Here's the weird part (and the question). If I drag puck A into puck B, it pushes puck B around like you'd expect.
But if I drag puck B into puck A, puck A doesn't move.
Again, the two pucks are identical. One is a duplicate of the other.
Some print debugging shows that puck B is applying the force I'd expect, at the time I'd expect, to the rigidbody I'd expect. It seems as if puck A is just ignoring that force.
What would cause that? Puck A isn't asleep... forces should wake up a sleeping rigidbody anyway, and even so I tried RigidBody.WakeUp immediately before adding the force, just as a hail-mary. It didn't work. :(
Is it possible that the order in which the rigidbodies get their updates is having an effect on this? (Boy, would that ever give me heartburn.)
Are there other things I should be checking, that I'm just too dense to think of right now?