Sto cercando di creare un gioco in cui gli oggetti possano essere trascinati, ma ho problemi con la fisica. Con corpi rigidi che hanno masse simili, a volte si spingono l'un l'altro quando vengono trascinati e causano movimenti indesiderati. Ecco una demo .
Mi piacerebbe farlo usando solo la fisica integrata di Unity 3D .
Nella demo, è possibile utilizzare il mouse per fare clic e trascinare gli oggetti. I cilindri hanno tutti collettori di scatole e masse di 10000. Hanno anche vari vincoli a seconda del loro orientamento (nessuno può ruotare e tutti sono vincolati in x o y). La sfera ha una massa di 1, un collettore di sfere e un vincolo az.
La sfera e i cilindri interagiscono bene. Tuttavia, trascinare i cilindri l'uno sull'altro provoca l'intersezione. Non voglio questo!
I cilindri hanno interpolato impostato su "Interpolare" e il rilevamento delle collisioni impostato su "Continuo". Ho gettato lo script "DontGoThroughThings" su tutti i cilindri, ma non sembra fare nulla. Per quanto riguarda l'impostazione della velocità dei corpi rigidi, ho usato entrambe le seguenti linee con sostanzialmente lo stesso risultato:
rb.AddForce(speed * diff * Time.deltaTime - rb.velocity, ForceMode.VelocityChange);
//rb.velocity = speed * diff * Time.deltaTime;
Senza scrivere il mio codice di rilevamento delle collisioni, non ho idee. C'è un'impostazione semplice o qualcosa che mi sono perso?
Con il contesto spiegato, ecco una domanda più precisa: "Come posso fare in modo che i cilindri nella mia demo non si muovano l'uno nell'altro?"