public class Map : MonoBehaviour
{
private GameObject cube;
// 存储地图数据
private List<GameObject[]> cubeList = new List<GameObject[]>();
private GameObject[] cubeItem;
private void Start()
{
// 加载方块预制体
cube = Resources.Load("Cube") as GameObject;
// 生成 10行 5列的地图
for (int i = 0; i < 10; i++)
{
cubeItem = new GameObject[5];
for (int j = 0; j < 5; j++)
{
Vector3 cubePos = new Vector3(i, 0, j);
GameObject cubeObj = Instantiate(cube, cubePos, Quaternion.identity);
cubeItem[j] = cubeObj;
}
cubeList.Add(cubeItem);
}
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.K))
{
StartCoroutine("CubeDown");
}
}
// 索引值,用来记录行数
private int index = 0;
private IEnumerator CubeDown()
{
while (index < 5)
{
// 每个一段时间塌陷
yield return new WaitForSeconds(0.2f);
for (int i = 0; i < cubeList[index].Length; i++)
{
Rigidbody rg = cubeList[index][i].AddComponent<Rigidbody>();
// 给掉落的地面元素添加旋转力
rg.angularVelocity = new Vector3(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)) * Random.Range(1, 10);
// 定时销毁游戏物体
Destroy(cubeList[index][i], 1f);
}
index++;
}
}
}
【Unity技术积累】使用协程实现地面塌陷
最新推荐文章于 2022-09-22 20:30:37 发布