拾荒者2D小游戏——障碍物的随机生成

首先在一开始还是优化一下上一节的内容,我们让地图在开始的时候随机生成产生的物体在根目录下,使整个项目看起来不美观,因此我们需要在一开始初始化的时候将生成的地图物体放在一个物体下面,其实这个setParent方法在甜甜圈里面也是学过的,但是我没有掌握牢固,
{
而且为了在hierarchy面板看起来整齐,chocolate.transform.setParent(transform);
就让生成的小巧克力都在GameManager底下了
}
但是单单只看这么一句话我不知道chocolate是什么??
因此还是相当于从一开始开学学习
首先我们创建一个游戏物体来存放生成的地图
private Transform mapHolder;
然后在InitMap()方法中我们生成一个物体将他的transform值赋给mapHolder
mapHolder=new GameObject(“Map”).transform;
以后生成的物体将他的父类设置为mapHolder
GameObject go= Instantiate(outWallArray[index],new Vector3(x,y,0),Quternion.identity);
go.transform.setParent(mapHolder);
在这里go就等于chocolate

随机生成障碍物最有意思的一点在于什么呢?就是我们的位置是随机的而且选择的障碍物也是随机的
在这里我很乱的一点是什么呢??生成障碍物需要先将这些障碍物的prefabs都获取到一个数组里,这里的随机生成只是将索引改成了Random.Range,是一个额外的步骤,而随机挑选位置呢?我们也需要先获取我们需要的这些位置将其添加到数组中。
下面我们按步骤来分析一下:
首先我们将中间的位置存放在一个List里面,List里面存放的位置信息
private List《Vector2》positionList=new List《Vector2》();
positionList.Clear();现将List清空一下,然后将位置遍历两个for循环嵌套,在循环中将位置一一加入positionList
positionList.Add(new Vector2(x,y));
我们还需要一个数组来存放所有的障碍物
public GameObject[] wallArray;
然后我们来创建障碍物,视频中生成2——8个,在前面声明变量minCountWall和maxCountWall
在2到8中随机取
intWallCount=Random.Range(minCountWall,maxCountWall+1);因为随机取得最后一个数取不到因此要加1
然后循环生成
for(int i=0;i<intCountWall;i++)
{
//随机取得位置
int positionIndex=Random.Range(0,positionList.Count);
Vector2 pos=positionList[positionIndex];
positionList.RemoveAt(positionIndex);
//随机取得障碍物
intwallIndex=Random.Range(0,wallArray.Length);
GameObject go=Instantiate(wallArray[wallIndex],pos,Quaternion.identity);
go.transform.setParent(mapHolder);
}

猜你喜欢

转载自blog.csdn.net/vickieyy/article/details/82966668