Estou tentando criar um jogo onde objetos podem ser arrastados, mas estou tendo problemas com a física. Com corpos rígidos com massas semelhantes, às vezes eles se empurram quando arrastados e causam movimentos indesejados. Aqui está uma demonstração .
Eu gostaria de fazer isso usando apenas a física interna do Unity 3D .
Na demonstração, você pode usar o mouse para clicar e arrastar objetos. Todos os cilindros têm coletores de caixas e massas de 10000. Eles também têm várias restrições, dependendo de sua orientação (nenhum pode girar e todos são restritos em x ou y). A esfera tem uma massa de 1, um colisor de esferas e uma restrição de az.
A esfera e os cilindros interagem bem. No entanto, arrastar os cilindros um sobre o outro causa interseção. Eu não quero isso!
Os cilindros têm interpolado definido como 'Interpolado' e a detecção de colisão definida como 'Contínua'. Eu joguei o script 'DontGoThroughThings' em todos os cilindros, mas ele parece não fazer nada. Quanto ao ajuste da velocidade dos corpos rígidos, usei as duas linhas a seguir com basicamente o mesmo resultado:
rb.AddForce(speed * diff * Time.deltaTime - rb.velocity, ForceMode.VelocityChange);
//rb.velocity = speed * diff * Time.deltaTime;
Sem escrever meu próprio código de detecção de colisão, estou sem ideias. Existe uma configuração simples ou algo que eu perdi?
Com o contexto explicado, aqui está uma pergunta mais precisa: "Como faço para que os cilindros na minha demonstração não se movam entre si?"