SCENARIO
我正在创建一个应用程序,我必须在原子(游戏对象)之间显示化学键。我正在使用Leap动作手来产卵并使原子碰撞形成分子。现在,原子之间的键合使用圆柱游戏对象。 当正确地产生粘合(圆柱体)时,它也会与原子相连接。使用固定关节的游戏对象。 所有这些事情都按照预期正常运作。
问题:
因为一个原子可以与多个原子形成键,所以我想在每个键合的原子之间保持一定的角度。(例如。在化学中CH4分子的原子相隔约105度)。 因此,我希望通过将分子中的每个原子分开一定角度,在我的应用程序中实现相同的效果。 我目前只能正确地创造分子,但根据角度没有任何东西可以分开。
这就是我目前正在做的事情。
private IEnumerator SetAtomPosition(Transform atomOne, Transform atomTwo, Transform cylinder)
{
cylinder.gameObject.GetComponent<Rigidbody>().isKinematic = true;
while (Vector3.Distance(atomOne.position, atomTwo.position) > atomDistance)
{
atomTwo.position = Vector3.MoveTowards(atomTwo.position, atomOne.position, Time.deltaTime * 0.1f);
yield return 0;
}
while (Vector3.Distance(atomOne.position, atomTwo.position) < atomDistance)
{
atomTwo.position = Vector3.MoveTowards(atomTwo.position, -atomTwo.forward * 1000f, Time.deltaTime * 0.1f);
yield return 0;
}
cylinder.transform.position = (atomTwo.position - atomOne.position) / 2.0f + atomOne.position;
cylinder.transform.rotation = Quaternion.FromToRotation(Vector3.up, atomTwo.position - atomOne.position);
#region JoinAtoms
cylinder.gameObject.AddComponent<FixedJoint>();
cylinder.gameObject.AddComponent<FixedJoint>();
var cylinderJoints = cylinder.GetComponents<FixedJoint>();
cylinderJoints[0].connectedBody = atomOne.GetComponent<Rigidbody>();
atomOne.GetComponent<Atom>().joint = cylinderJoints[0];
//cylinderJoints[0].breakForce = breakForce;
cylinderJoints[1].connectedBody = atomTwo.GetComponent<Rigidbody>();
atomTwo.GetComponent<Atom>().joint = cylinderJoints[1];
KinematicToggle(cylinder.gameObject);
cylinder.GetComponent<Rigidbody>().mass = 10f;
#endregion
yield return null;
}
这就是目前的样子
我希望这4个白色球体围绕黑色球体(碳原子)排列。
我想要的是与此图像类似的东西。