首先,在场景中添加一个Cube,添加为预制件。
创建一个脚本,在脚本中写入下面的代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class qianjing : MonoBehaviour
{
public Transform prefab;//定义预制件
public Vector3 onepos;//定义起始位置
public Vector3 nextpos;//定义下一个位置
public int num;//数量
public Vector3 minsize;//最小范围
public Vector3 maxsize;//最大范围
Queue<Transform> queues;//队列
public float distance;
void Start()
{
queues = new Queue<Transform>(num);//实例化队列
for (int i = 1; i < num; i++)
{
Transform trans = GameObject.Instantiate(prefab);//实例化预制件
queues.Enqueue(trans);//将预制件添加至队列
}
nextpos = onepos;//起始位置 = 下一位置
for (int i = 1; i < num; i++)
{
Keep();
}
}
void Update()
{
if (Run.distances - queues.Peek().position.x >= distance)//物体移动距离与预制件长度的差
{
Keep();
}
}
/// <summary>
/// 预制件排列
/// </summary>
private void Keep()
{
//(预制件)随机大小
Vector3 ban = new Vector3(Random.Range(minsize.x, maxsize.x), Random.Range(minsize.y, maxsize.y), Random.Range(minsize.z, maxsize.z));
Transform trans = queues.Dequeue();//暂时移除(预制件)
Vector3 poss = nextpos;//获取下一个预制件
poss.y += ban.y * 0.5f;//预制件在Y轴方向上移预制件的一半距离
poss.x += ban.x * 0.5f;//预制件在X轴方向右移预制件的一半距离
trans.localScale = ban;//重新生成随机预制件
trans.position = poss;//获取下一个预制件位置
nextpos.x += ban.x;// 预制件在X轴方向右移(前)预制件大小的距离
queues.Enqueue(trans);//添加队列中
}
}返回场景,创建一个空游戏体,将脚本挂载在空游戏体上
点击运行,在游戏窗口就可以看到随机产生的游戏路径。