所以,这对我来说似乎很奇怪。我对Unity来说比较新,所以我确信这是我误解了一些东西。
我正在组建一个VSEPR教程模块。 VSEPR是电子相互排斥并形成原子形状(几何)的模型。
我通过制作(在这种情况下)4个杆(圆柱基元)并使用刚体来模拟这个.AddForce对所有这些都施加相等的力。只要力量相等,这就可以很好地工作。在下面的图像中,您会看到杆在109.47度处非常均匀(实际上您可以"看到"它们的附着物,两个孤对和两个电子键......棒被遮挡在原子壳中。)
(BTW原子的外壳只是一个球体原始 - 画得很漂亮。)
然而,在现实世界中,孤独的对实际上施加了更多的力...所以当我向模型添加这个额外的力量...而不是仅仅推动其他电子棒更远一点,它推动了原子壳外的整个4键结构。
这个事实的原因奇怪的是......两件事。
所有棒都是贝壳的孩子......所以我认为这使得它们与壳相比有些不动(即如果它们移动,壳会与它们一起移动......这样就可以了)。
我有一个ConfiguableJoint将杆固定在原子壳(0,0,0)的中心。 x / y / z-motion设置为固定。我认为这应该保持杆不可靠地连接到壳的0,0,0中心......但我猜不是。
兴趣点:
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
答案 0 :(得分:1)
您可能希望使用球体来表示电子,因此将力施加到它们上并根据此球体重新定向(旋转)杆。
答案 1 :(得分:0)
我想我找到了自己的答案......除非有人建议更好的方法来解决这个问题。
我只是减少了电子棒的质量,增加了球体的质量。我不确定这是不是最好的做法&#34;解决方案或kluge ...所以输入仍然欢迎: - )