The last video that you posted shows player-vs-npc interaction. If npc interaction is what you’re after then set the npc’s rigidbody.mass = 0.0f. However, if you want the npc to move about then set its mass to thousands of magnitude higher than the player’s, as to not allow npcs to be moved by the player.
If you’re actually looking for a player-vs-player interaction and don’t want the player to be moved by another player, take a look at 18_CharacterDemo, the
void Character::HandleNodeCollision(StringHash eventType, VariantMap& eventData) fn., this block:
Vector3 contactPosition = contacts.ReadVector3();
Vector3 contactNormal = contacts.ReadVector3();
/*float contactDistance = */contacts.ReadFloat();
/*float contactImpulse = */contacts.ReadFloat();
the contactImpulse is commented out, but that tells you the impulse which was applied to the other body. Check whether the otherbody is a player and store that impulse and apply that on the next frame in FixedUpdate. Apply on the next frame because the collision callback indicates that the physics cycle has completed and will do nothing if you apply it in that function.
edit: err, I hope you understand that when I say store and apply the impulse, that I mean negate/reverse the impulse which was applied. I might be mistaken about applyImpulse in collisionHandler. I know applying force and torque from that function gets thrown out, but impulse might stick.