Estoy tratando de crear un juego donde se puedan arrastrar objetos, pero tengo problemas con la física. Con cuerpos rígidos que tienen masas similares, a veces se empujan unos a otros cuando son arrastrados y causan movimientos no deseados. Aquí hay una demostración .
Me gustaría hacer esto usando solo la física incorporada de Unity 3D .
En la demostración, puede usar el mouse para hacer clic y arrastrar objetos. Todos los cilindros tienen colisionadores de caja y masas de 10000. También tienen varias restricciones dependiendo de su orientación (ninguno puede rotar, y todos están restringidos en x o y). La esfera tiene una masa de 1, un colisionador de esfera y una restricción az.
La esfera y los cilindros interactúan bien. Sin embargo, arrastrar los cilindros unos sobre otros provoca la intersección. ¡No quiero esto!
Los cilindros tienen interpolar configurado en 'Interpolar' y detección de colisión configurada en 'Continuo'. He lanzado el script 'DontGoThroughThings' en todos los cilindros, pero no parece hacer nada. En cuanto a establecer la velocidad de los cuerpos rígidos, he usado estas dos líneas siguientes con básicamente el mismo resultado:
rb.AddForce(speed * diff * Time.deltaTime - rb.velocity, ForceMode.VelocityChange);
//rb.velocity = speed * diff * Time.deltaTime;
Sin escribir mi propio código de detección de colisión, me quedo sin ideas. ¿Hay una configuración simple o algo que me haya perdido?
Con el contexto explicado, aquí hay una pregunta más precisa: "¿Cómo puedo hacer que los cilindros en mi demo no se muevan entre sí?"
Respuestas:
Sin mirar su proyecto / código, me gustaría sugerir esto:
Le permitirá restringir la física pero dentro del alcance y el motor de física de Unity. Puede moverse con el script para que bloquee solo un objeto que se moverá, etc., pero esto debería ayudarlo a comenzar.
fuente
Desea que la detección de colisión esté configurada
Continuous Dynamic
para objetos que se mueven rápidamente.Continuous
se usa para objetos estáticos o de movimiento lento con los queContinuous Dynamic
chocan los objetos. Ver aquí .(Tenga en cuenta que la detección continua de colisiones es costosa, así que úsela con moderación)
fuente