Você pode implementar a capacidade de ter objetos filhos para um objeto (onde os objetos filhos seriam afetados automaticamente por alterações na posição / rotação do pai). Depois da colisão, quando eles devem trancar-se, você cria um objeto invisível e transforma os dois objetos anexos em filhos. Então, em vez de aplicar transformações (movimento, rotação) nos objetos individuais, você aplica no grande, OU ainda pode aplicar forças aos objetos filhos individuais, que marcariam "eu tenho um pai?" E se sim, a força seria enviada ao pai (que mesclaria forças de todos os objetos filhos em um vetor que se aplicaria a si mesmo).
Além disso, essa abordagem deve lidar adequadamente com sua rotação, se você calcular o centro de massa para o pai invisível de acordo com os pesos dos objetos travados, o que o método de John parece não realizar (o objeto unido gira em torno de seu novo centro de massa compartilhado, não em torno do centro de massa de um dos objetos) e você pode facilmente aninhar esse tipo de comportamento sem a necessidade de código adicional. Parece ser a abordagem mais robusta e flexível.
+ condição, se a força aplicada ao filho for forte o suficiente para quebrar a articulação, e você pode lidar com o "desbloqueio" dele simplesmente removendo o relacionamento pai-> filho. Se houver apenas um filho, você também o separa e também remove o pai invisível.
Posso fornecer mais detalhes (com fotos e pelo menos pseudocódigo e outros), se você estiver interessado.