2015-02-25 3 views
0

Donc, cela semble être un étrange (pour moi). Je suis relativement nouveau à Unity, donc je suis sûr que c'est moi qui ai mal compris quelque chose.unité 3d: rigidbody.AddForce (forceDirection.normalized * force) déplacer les objets loin du parent et du joint

Je travaille sur un module de tutoriel VSEPR dans l'unité. VSEPR est le modèle par lequel les électrons se repoussent et forment la forme (géométrie) des atomes.

Je simule ceci en faisant (dans ce cas) 4 tiges (primitives de cylindre) et en utilisant un corps rigide.Ajouter Force pour appliquer une force égale contre chacun d'eux. Cela fonctionne magnifiquement, tant que la force est égale. Dans l'image suivante, vous verrez que les tiges sont magnifiquement équi-distantes à 109.47 degrés (vous pouvez réellement "voir" leurs objets attachés, deux paires solitaires et deux liaisons électroniques ... les tiges sont obscurcies dans la coquille d'atome.)

(BTW coquille de l'atome est juste une primitive sphère - peint tous assez.)

Cependant, dans le monde réel, les doublets exercent en fait un peu plus de force ... quand j'ajouter cette force supplémentaire à la modèle ... au lieu de simplement pousser les autres tiges d'électrons un peu plus loin, il pousse la structure complète de 4 liaisons à l'extérieur de la coquille de l'atome.

LA RAISON QU'IL SEMBLE EST IMPRESSIONNANTE ... deux choses.

  1. Toutes les tiges sont des enfants de la coquille ... donc je pensais que les rendait un peu immobile par rapport à la coquille (s'ils se sont déplacés, la coquille se déplacerait avec eux ... qui serait bien) . J'ai un point Configuable qui maintient les barres au centre de la coquille des atomes (0,0,0). Le mouvement x/y/z est défini sur fixe. Je pensais que cela devrait garder les tiges assez immuablement attachées au centre 0,0,0 de la coque ... mais je suppose que non.

points d'intérêt:

  • Les tiges poussent uniquement sur l'autre, par un script associé à une tige en ajoutant la force à une tige adjacente. ils n'ajoutent pas AddForce au shell de l'atome ou quoi que ce soit d'autre.

enter image description here enter image description here enter image description here enter image description here

CODE:

void RepulseLike() { 

    if (control.disableRepulsionForce) { return; } // No force when dragging 

    //////////////////// DETERMINE IF FORCE APPLIED ////////////////////////////// 
    // Scroll through each Collider that this.BondStick bumps 
    foreach (Collider found in Physics.OverlapSphere(transform.position, (1f))) { 

     // Don't repel self 
     if (found == this.collider) { continue; } 

     // Check for charged particle 
     if (found.gameObject.tag.IndexOf("Charge") < 0) { continue; }// No match "charge", not a charged particle 


     /////////////// APPLY FORCE /////////////// 
     // F = k(q1*q2/r^2) 
     // where 
     // k = Culombs constant which in this instance is represented by repulseChargeFactor 
     // r = distance 
     // q1 and q2 are the signed magnitudes of the charges, in this case -1 for electrons and +1 for protons 

     // Swap from local to global variable for other methods 
     other = found; 

     ///////////////////////////////// 
     // Calculate pushPoints for SingleBonds 
     forceDirection = (other.transform.position - transform.position) * magnetism; //magnetism = 1 

     // F = k(q1*q2/distance^2), q1*q2 ia always one in this scenario. k is arbitrary in this scenario 
     force = control.repulseChargeFactor * (1/(Mathf.Pow(distance, 2))); 

     found.rigidbody.AddForce(forceDirection.normalized * force);// * Time.fixedDeltaTime); 

    }//Foreach Collider 

}//RepulseLike Method 

Répondre

1

Vous pouvez utiliser des sphères pour représenter les électrons, donc appliquer des forces sur eux et tiges réorienter (Pivoter) selon à cette sphère.

+0

Je devrai me pencher sur cela :-) Cela aiderait-il avec ce problème particulier? Ou est-ce juste une suggestion pour améliorer le modèle global? – RightmireM

+0

Je pense que les deux. Parce que Physics.OverlapSphere vérifie les «volumes limites» des collisionneurs, il inclut les 4 barres. – sithereal

0

Je pense que j'ai trouvé ma propre réponse ... à moins que quelqu'un ait des suggestions pour une meilleure façon de gérer cela. J'ai simplement réduit la masse des bâtonnets d'électrons et augmenté la masse de la sphère. Je ne suis pas sûr si c'est la solution des «meilleures pratiques» ou un kluge ... donc l'entrée toujours bien accueillie :-)