Unity3d 围绕另一个游戏对象旋转游戏对象

Unity3d 围绕另一个游戏对象旋转游戏对象,unity3d,rotation,2d,Unity3d,Rotation,2d,我在一个大圆圈里有19个圆圈 我需要写这个算法 “如果单击中心圆(周围的圆围绕中心圆旋转)” 不仅仅是旋转(围绕周围的圆-该圆应等于/指定给它的下一个圆) 检查此图像: 我写了一行复杂的代码,但没有成功 void OnMouseDown() { if (gameObject.tag == "dynball") { if (isNotBanned(int.Parse(gameObject.name))) { change();

我在一个大圆圈里有19个圆圈

我需要写这个算法

“如果单击中心圆(周围的圆围绕中心圆旋转)”

不仅仅是旋转(围绕周围的圆-该圆应等于/指定给它的下一个圆)

检查此图像:

我写了一行复杂的代码,但没有成功

void OnMouseDown()
{
    if (gameObject.tag == "dynball")
    {
        if (isNotBanned(int.Parse(gameObject.name)))
        {
            change();
        }
    }
}
    void change()
{
    if (int.Parse(gameObject.name) == 4 || int.Parse(gameObject.name) == 5)
    {
        tmp = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 3];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 3] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 8 || int.Parse(gameObject.name) == 9 || int.Parse(gameObject.name) == 10)
    {
        tmp = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 13 || int.Parse(gameObject.name) == 14)
    {
        tmp = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 3] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 3];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 3] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1] = tmp;
    }
    Debug.Log("I am here");
}

使用transform.rotateAround或quaternion.slerp缓存变量,伙计,有太多方法调用
FindGameObjectsWithTag(…)
int.Parse(…)
,我很惊讶这不会使Unity崩溃

GameObject[] dynballs;
int gName;

void Start()
{
    gName = int.Parse(gameObject.name);
}

void OnMouseDown()
{
    if (gameObject.tag == "dynball")
    {
        if (isNotBanned(int.Parse(gameObject.name)))
        {
            change();
        }
    }
}
    void change()
{
    dynballs = GameObject.FindGameObjectsWithTag("dynball");
    if (int.Parse(gameObject.name) == 4 || int.Parse(gameObject.name) == 5)
    {
        tmp = dynballs[gName - 4];
        dynballs[gName - 4] = dynballs[gName - 3];
        dynballs[gName - 3] = dynballs[gName + 1];
        dynballs[gName + 1] = dynballs[gName + 5];
        dynballs[gName + 5] = dynballs[gName + 4];
        dynballs[gName + 4] = dynballs[gName - 1];
        dynballs[gName - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 8 || int.Parse(gameObject.name) == 9 || int.Parse(gameObject.name) == 10)
    {
        tmp = dynballs[int.Parse(gameObject.name) - 5];
        dynballs[gName - 5] = dynballs[gName - 4];
        dynballs[gName - 4] = dynballs[gName + 1];
        dynballs[gName + 1] = dynballs[gName + 5];
        dynballs[gName + 5] = dynballs[gName + 4];
        dynballs[gName + 4] = dynballs[gName - 1];
        dynballs[gName - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 13 || int.Parse(gameObject.name) == 14)
    {
        tmp = dynballs[gName - 5];
        dynballs[gName - 5] = dynballs[gName - 4];
        dynballs[gName - 3] = dynballs[gName + 1];
        dynballs[gName + 1] = dynballs[gName + 4];
        dynballs[gName + 4] = dynballs[gName + 3];
        dynballs[gName + 3] = dynballs[gName - 1];
        dynballs[gName - 1] = tmp;
    }
    Debug.Log("I am here");
}

但不管怎样,iv'e回答了一个类似的问题,你可能会发现答案很有用,

这很简单,我不需要旋转,只需要将周围的圆向右或向左移动检查此图像,然后使用变换+偏移(在每个方向上你想要或使用角度)对于玩家来说,内环的位置会发生变化,但在我的游戏逻辑中,我必须将每个圆圈分配给它后面的一个圆圈