public class SineLine : MonoBehaviour { public int CubeCount = 100; public GameObject Cuber;//预设Cube private Transform[] cubes;//记录Cube,用来波动 void Awake(){ cubes = new Transform[CubeCount]; for (int i = 0; i < CubeCount; i++) { //将所有的cube限制在[-1,1]之间 Transform go = Instantiate (Cuber).transform; go.localScale = Vector3.one / CubeCount * 2; Vector3 pos = Vector3.one; //在[0,1]范围,x=0会有半边在框框外,所以+0.5偏移一下再除以数量,再-0.5后*2变换范围为[-1,1] pos.x = ((i + 0.5f) / CubeCount - 0.5f) * 2; go.SetParent (transform); go.localPosition = pos; cubes [i] = go; } } void Update () { for (int i = 0; i < CubeCount; i++) { Vector3 pos = cubes [i].localPosition; //cube被限制在[-1,1]之间,差值为2,乘于PI后刚好为一周 pos.y = Mathf.Sin (Mathf.PI * (pos.x + Time.time)); cubes [i].localPosition = pos; } } }