一直在想这个问题,终于搞定了,就是说要生成100个怪物,且要控制怪物之间的间距,不能太近了。这就要考虑如何才能不重复:
public List<int> num = new List<int>();//用数组的话没有直接移除的方法
public List<int> view = new List<int>();//随机好的数字
void Start()
{
for (int i = 0; i < 100; i++)//100是随机的数量
{
num.Add(i);//向随机的库里填加要随机的元素,这里我就用0-99吧,表示0至100随机不重复
}
for (int i = 0; i < 100; i++)
{
int index = Random.Range(0, num.Count);//这里随机的是所有随机数里边的索引
view.Add(num[index]);//根据索引来取到相应的数值
num.RemoveAt(index);//把该索引移除,以实现不重复
}
}
思路就是随机一个我就从库里删除这个数值的索引,然后下次随机的时候就不会有这个索引了,自然就达到了不重复的目的
接下来是生成怪物了:
using UnityEngine;
using System.Collections.Generic;
public class CreateRandomMonster : MonoBehaviour
{
List<Vector3> pos = new List<Vector3>();//所有的坐标都存放在这里
public GameObject cube;//需要生成的物体
int count = 10;//生成的数量
int space = 2;//物体之间的间距
void Start()
{
CreateMonster();//生成坐标,
RandomMonster();//随机产生
}
void CreateMonster()
{
for (int i = 0; i < 10; i += space)//就是存放坐标的一个过程,这里就用10*10的方阵吧
{
for (int j = 0; j < 10; j += space)
{
pos.Add(new Vector3(i, 0, j));
}
}
}
void RandomMonster()
{
for (int i = 0; i < count; i++)
{
int index = Random.Range(0, pos.Count);//随机一个坐标库里的坐标
GameObject mon = Instantiate(cube, pos[index], Quaternion.identity) as GameObject;//将生成的物体放在该坐标
mon.transform.parent = transform;//找个parent
pos.RemoveAt(index);//随机完一个坐标就从库里删除以达到不重复的目的
}
}
}