【发布时间】:2021-04-18 21:59:24
【问题描述】:
所以事情就是这样。我有一个游戏,其中我有一个生成器 - 生成障碍物。我想在每遇到 5 个障碍后提高速度。示例:第 1、第 2、第 3、第 4、第 5 个障碍物的默认速度 = 5,我希望第 6、第 7、第 8、第 9、第 10 个障碍物的速度提高到速度 = 10 等。我已经有一些嵌套的 if 语句,但是我想无限地提高速度,例如第 100 个障碍物的速度 = 1000。这是我的代码:
IEnumerator SpawnObstacles()
{
int i = 0;
do
{
var randomTime = Random.Range(minTime, maxTime);
var randomObstacle = Random.Range(0, obstacles.Length);
yield return new WaitForSeconds(randomTime);
var obstacle = Instantiate(obstacles[randomObstacle], transform.position, Quaternion.identity);
Destroy(obstacle, 10f);
i++;
if(i >= 10)
{
IncreaseSpeed();
if(i >= 20)
{
IncreaseSpeed();
if(i >= 30)
{
IncreaseSpeed();
}
}
}
}
while (true);
}
private void IncreaseSpeed()
{
Obstacle obs = FindObjectOfType<Obstacle>();
obs.speed += 5f;
}
【问题讨论】:
-
您可以使用模数来测试每 5 次迭代:
if (i % 5 == 0) IncreaseSpeed()或将您的速度设置为迭代次数的函数:obj.speed = (i/5) * 5f -
注意你说的是每5个,但是你的
ifs每10个就疯狂增加速度..(你的速度是5,5,5,5,5,5,5,5,5 ,5,15,25,35,45,55,65,75,85,95,105,125,145,165...)
标签: c# loops unity3d coroutine