围绕另一个游戏对象旋转游戏对象
rotate gameObjects around another gameObject
我有19圈围成一个大圈
我需要写这个算法
"in case of clicking on a centralized circle (the around circles rotate around it)"
不仅旋转(围绕圆圈 - 圆圈应该 equal/assigned 到它的下一个圆圈)
检查这张图片: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");
}
使用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");
}
但无论如何,我已经回答了一个类似的问题 and ,您可能会发现这些答案很有用
我有19圈围成一个大圈
我需要写这个算法
"in case of clicking on a centralized circle (the around circles rotate around it)"
不仅旋转(围绕圆圈 - 圆圈应该 equal/assigned 到它的下一个圆圈)
检查这张图片: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");
}
使用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");
}
但无论如何,我已经回答了一个类似的问题