等级增加时如何产生障碍物?
How to spawn obstacles when level increase?
我有一个问题,我想在玩家进入下一关时生成不同的障碍物,我有无限数量的关卡,我想有时生成随机障碍物,我的障碍物是预制件。一切都适用于 spawn 但是当我在我的路上这样做时代码太多了,因为 200 个级别会有超过 500 行,因为我检查级别是否高于 0 和低于 10 以仅产生 10 个障碍物级别,然后下一个将是另一个相同的代码来检查级别是否大于 10 小于 20.. 另外我想在 1-10 级别上生成随机障碍物所以我的代码再次变大。
这是前 10 个级别的简单代码:
if(currentLevel>0 && currentLevel < 10{
for (int i = 0; i < objectNumberSpawner; i++)
{
int randomCircleSpawner = Random.Range(0, 3);
switch (randomCircleSpawner)
{
case 0:
Debug.Log("this");
lastObjectCreated = Instantiate(obstacles[0], new Vector3(obstacles[0].transform.position.x, obstacles[0].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
lastObjectCreated = Instantiate(obstacles[1], new Vector3(obstacles[1].transform.position.x, obstacles[1].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 1:
lastObjectCreated = Instantiate(obstacles[1], new Vector3(obstacles[1].transform.position.x, obstacles[1].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 2:
lastObjectCreated = Instantiate(obstacles[2], new Vector3(obstacles[2].transform.position.x, obstacles[2].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 3:
lastObjectCreated = Instantiate(obstacles[3], new Vector3(obstacles[3].transform.position.x, obstacles[3].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
}
}
}else if (currentLevel)
{
}
我的问题是,当玩家达到一定水平时,有没有其他方法可以用不同的预制件产生不同的障碍,因为代码太多了,但如果这是我认为我需要继续的唯一方法......其他代码示例如果没有制作但是对于更高级别有相同的过程只有更多障碍..我不知道这是正确的方法因为级别会有超过 1000 行代码并且这对我.
当我添加几乎相同的过程以在该级别上生成通电时,我将拥有多少行代码真是太疯狂了..
感谢 Whosebug 为我指出正确的解决方案,因为那不会像我猜的那样好。
编辑:我忘了提到当级别增加时变量 "lastObjectCreated " 下的 switch 语句中的对象也会改变..我希望有人有比我更好的解决方案..
目前,我看到您的 switch
块可以大大缩短。让我们看看:
case 2:
lastObjectCreated = Instantiate(obstacles[2], new Vector3(obstacles[2].transform.position.x, obstacles[2].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 3:
lastObjectCreated = Instantiate(obstacles[3], new Vector3(obstacles[3].transform.position.x, obstacles[3].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
几乎相同。让我们声明一个本地函数并将索引作为参数传递:
void SpawnObstacle (int i) {
lastObjectCreated = Instantiate(obstacles[i], new Vector3(obstacles[i].transform.position.x, obstacles[i].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
}
我们整个 switch
变成:
switch (randomCircleSpawner) {
case 0:
SpawnObstacle (0);
SpawnObstacle (1);
break;
case 1:
SpawnObstacle (1);
break;
case 2:
SpawnObstacle (2);
break;
case 3:
SpawnObstacle (3);
break;
}
进一步简化:
SpawnObstacle (randomCircleSpawner);
if (randomCircleSpawner == 0) {
SpawnObstacle (1);
}
我有一个问题,我想在玩家进入下一关时生成不同的障碍物,我有无限数量的关卡,我想有时生成随机障碍物,我的障碍物是预制件。一切都适用于 spawn 但是当我在我的路上这样做时代码太多了,因为 200 个级别会有超过 500 行,因为我检查级别是否高于 0 和低于 10 以仅产生 10 个障碍物级别,然后下一个将是另一个相同的代码来检查级别是否大于 10 小于 20.. 另外我想在 1-10 级别上生成随机障碍物所以我的代码再次变大。
这是前 10 个级别的简单代码:
if(currentLevel>0 && currentLevel < 10{
for (int i = 0; i < objectNumberSpawner; i++)
{
int randomCircleSpawner = Random.Range(0, 3);
switch (randomCircleSpawner)
{
case 0:
Debug.Log("this");
lastObjectCreated = Instantiate(obstacles[0], new Vector3(obstacles[0].transform.position.x, obstacles[0].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
lastObjectCreated = Instantiate(obstacles[1], new Vector3(obstacles[1].transform.position.x, obstacles[1].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 1:
lastObjectCreated = Instantiate(obstacles[1], new Vector3(obstacles[1].transform.position.x, obstacles[1].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 2:
lastObjectCreated = Instantiate(obstacles[2], new Vector3(obstacles[2].transform.position.x, obstacles[2].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 3:
lastObjectCreated = Instantiate(obstacles[3], new Vector3(obstacles[3].transform.position.x, obstacles[3].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
}
}
}else if (currentLevel)
{
}
我的问题是,当玩家达到一定水平时,有没有其他方法可以用不同的预制件产生不同的障碍,因为代码太多了,但如果这是我认为我需要继续的唯一方法......其他代码示例如果没有制作但是对于更高级别有相同的过程只有更多障碍..我不知道这是正确的方法因为级别会有超过 1000 行代码并且这对我.
当我添加几乎相同的过程以在该级别上生成通电时,我将拥有多少行代码真是太疯狂了..
感谢 Whosebug 为我指出正确的解决方案,因为那不会像我猜的那样好。
编辑:我忘了提到当级别增加时变量 "lastObjectCreated " 下的 switch 语句中的对象也会改变..我希望有人有比我更好的解决方案..
目前,我看到您的 switch
块可以大大缩短。让我们看看:
case 2:
lastObjectCreated = Instantiate(obstacles[2], new Vector3(obstacles[2].transform.position.x, obstacles[2].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
case 3:
lastObjectCreated = Instantiate(obstacles[3], new Vector3(obstacles[3].transform.position.x, obstacles[3].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
break;
几乎相同。让我们声明一个本地函数并将索引作为参数传递:
void SpawnObstacle (int i) {
lastObjectCreated = Instantiate(obstacles[i], new Vector3(obstacles[i].transform.position.x, obstacles[i].transform.position.y, startSpawn), Quaternion.identity);
startSpawn += deltaY;
spawnPlane();
}
我们整个 switch
变成:
switch (randomCircleSpawner) {
case 0:
SpawnObstacle (0);
SpawnObstacle (1);
break;
case 1:
SpawnObstacle (1);
break;
case 2:
SpawnObstacle (2);
break;
case 3:
SpawnObstacle (3);
break;
}
进一步简化:
SpawnObstacle (randomCircleSpawner);
if (randomCircleSpawner == 0) {
SpawnObstacle (1);
}