Unity3d 如何设置两个游戏对象之间的特定角度

Unity3d 如何设置两个游戏对象之间的特定角度,unity3d,leap-motion,rigid-bodies,Unity3d,Leap Motion,Rigid Bodies,场景 我正在创建一个应用程序,我必须显示原子之间的化学键(这是游戏对象)。我用跳跃式的手来繁殖和制造原子碰撞形成分子。现在,原子间的键是用圆柱体游戏物体形成的。 此外,当邦德(圆柱)正确繁殖时,它会使用固定关节连接到原子的游戏对象。 所有这些都正常工作并符合预期 问题: 因为一个原子可以与多个原子形成键,所以我想在每个键合原子之间保持一定的角度。(例如。在化学中,CH4分子的原子相隔105度左右)。 所以我也希望在我的应用程序中通过以一定角度分离分子中的每个原子来达到同样的效果。 我目前所做的只

场景

我正在创建一个应用程序,我必须显示原子之间的化学键(这是游戏对象)。我用跳跃式的手来繁殖和制造原子碰撞形成分子。现在,原子间的键是用圆柱体游戏物体形成的。 此外,当邦德(圆柱)正确繁殖时,它会使用固定关节连接到原子的游戏对象。 所有这些都正常工作并符合预期

问题:

因为一个原子可以与多个原子形成键,所以我想在每个键合原子之间保持一定的角度。(例如。在化学中,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;
}
private IEnumerator setAtomComposition(变换atomOne、变换atomTwo、变换圆柱体)
{
cylinder.gameObject.GetComponent().IsKinetic=true;
while(矢量3.距离(atomOne.position,atomTwo.position)>atomDistance)
{
atomTwo.position=Vector3.movetoward(atomTwo.position,atomOne.position,Time.deltaTime*0.1f);
收益率为0;
}
while(矢量3.距离(atomOne.position,atomTwo.position)
我希望这4个白色球体围绕黑色球体(碳原子)排列

我想要的是类似于这张图片的东西


当你说围绕黑色球体对齐时,你的意思是角度均匀分布?你介意提供一个示例输出吗?是的,你可以说这与我想要的类似。@user1767754添加的图像也可能会为你指出正确的方向。不,你使用那里的算法来计算球体上n个点的分布位置(其中n是当前键数)并使用结果点列表计算旋转。