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?"
Respostas:
Sem olhar para o seu projeto / código, eu gostaria de sugerir isso:
Isso permitirá que você restrinja a física, mas dentro do escopo e do mecanismo de física da Unity. Você pode mexer com o script para fazer com que ele bloqueie apenas um objeto a ser movido etc, mas isso deve ajudá-lo a começar.
fonte
Você deseja definir a detecção de colisão
Continuous Dynamic
para objetos em movimento rápido.Continuous
é usado para objetos estáticos ou de movimento lento com os quais osContinuous Dynamic
objetos colidem. Veja aqui .(Lembre-se de que a detecção contínua de colisões é cara, use-a com moderação)
fonte