【问题标题】:rotate gameObjects around another gameObject围绕另一个游戏对象旋转游戏对象
【发布时间】:2015-09-09 05:51:38
【问题描述】:

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

我需要写这个算法

“如果点击一个中心圆圈(周围的圆圈围绕它旋转)”

不只是旋转(关于周围的圆圈 - 圆圈应该等于/分配给它的下一个圆圈)

查看此图片:http://i.imgur.com/HknGXFh.png

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

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");
}

【问题讨论】:

    标签: unity3d rotation 2d


    【解决方案1】:

    缓存你的变量,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");
    }
    

    但无论如何,我已经回答了类似的问题 herehere,您可能会发现这些答案很有用

    【讨论】:

      【解决方案2】:

      使用 transform.rotateAround 或 quaternion.slerp

      【讨论】:

      • thats easy , I dont 只需要旋转我需要将周围的圆圈向右或向左移动检查此图像i.imgur.com/DZBYkCq.png
      • 然后只需使用内圆的变换+偏移(在您想要或使用角度的每个方向上)
      • 它会显示为游戏玩家移动了,但是,在我的游戏逻辑中,我必须将每个圆圈分配给它的下一个
      猜你喜欢
      • 1970-01-01
      • 2021-01-23
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多