我打算用Unity3d做一個可視化冒泡排序. C# 寫冒泡很簡單,可是用在Unity3d就不是那么一回事啊。。。求大家幫我看看代碼。
不知道哪里出問題了 代碼如下
void Update()
{
for (i = 0; i < shapes.Length-1;i++)
{
for (j = i+1; j < shapes.Length; j++)
{
x0 = shapes[i].transform.position.x; //提取2個cube位置資訊
y0 = shapes[i].transform.position.y;
z0 = shapes[i].transform.position.z;
x1 = shapes[j].transform.position.x;
y1 = shapes[j].transform.position.y;
z1 = shapes[j].transform.position.z;
isize = shapes[i].transform.localScale.y; //提取2個cube長度,用來對比大小
jsize = shapes[j].transform.localScale.y;
if (isize > jsize)
{
shapes[j].transform.position = new Vector3(Mathf.Lerp(shapes[j].transform.position.x, shapes[i].transform.position.x, speed * Time.deltaTime), shapes[1].transform.position.y, shapes[1].transform.position.z);
shapes[i].transform.position = new Vector3(Mathf.Lerp(shapes[i].transform.position.x, shapes[j].transform.position.x, speed * Time.deltaTime), shapes[0].transform.position.y, shapes[0].transform.position.z);
//交換位置
}
}
}
}
uj5u.com熱心網友回復:

開始后就居中合體了。。
uj5u.com熱心網友回復:
你解決了嗎?uj5u.com熱心網友回復:
沒。。我要通宵編程了
這個應該是update每秒幾百次呼叫,而for回圈也是每秒回圈幾百次,但是for里面苦逼的平移操作卻來不及完成吧?
好像涉及到協程什么的,我真的一點辦法都沒有。。深夜我還會來看看的~~~
uj5u.com熱心網友回復:
GameObject[] shapes;
float[] shapes_x;
// Use this for initialization
void Start()
{
shapes = new GameObject[6];
shapes_x = new float[6];
shapes[0] = GameObject.Find("Cube");
shapes[1] = GameObject.Find("Cube1");
shapes[2] = GameObject.Find("Cube2");
shapes[3] = GameObject.Find("Cube3");
shapes[4] = GameObject.Find("Cube4");
shapes[5] = GameObject.Find("Cube5");
}
bool flag = false;
// Update is called once per frame
void Update()
{
if (flag == false) //表示已經排序過來,不然會導致一直排序,會閃爍
{
for (int j = 0; j < shapes.Length; j++)
{
for (int i = shapes.Length - 1; i > j; i--)
{
float x0 = shapes[i].transform.position.x; //提取2個cube位置資訊
float y0 = shapes[i].transform.position.y;
float z0 = shapes[i].transform.position.z;
float x1 = shapes[j].transform.position.x;
float y1 = shapes[j].transform.position.y;
float z1 = shapes[j].transform.position.z;
float isize = shapes[i].transform.localScale.y; //提取2個cube長度,用來對比大小
float jsize = shapes[j].transform.localScale.y;
if (isize > jsize)
{
GameObject tem;
tem = shapes[i];
shapes[i] = shapes[j];
shapes[j] = tem;
}
}
}
for (int k = 0; k < shapes.Length; k++)
{
shapes_x[k] = shapes[k].transform.position.x;
}
System.Array.Sort<float>(shapes_x);
for (int j = 0; j < shapes.Length; j++)
{
for (int i = 0; i < shapes.Length; i++)
{
if (j == i)
{
shapes[j].transform.position = new Vector3(Mathf.Lerp(shapes[j].transform.position.x, shapes_x[i], 50f * Time.deltaTime), shapes[j].transform.position.y, shapes[j].transform.position.z);
}
}
}
flag = true;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/72632.html
標籤:Unity3D
