C# 循环或if语句中的增量
事情是这样的。我有一个游戏,其中我有一个产卵-产卵的障碍。我想在每第五个障碍后提高速度。示例:第一、第二、第三、第四、第五个障碍物的默认速度为5,我希望第六、第七、第八、第九、第十个障碍物的速度增加到速度为10,等等。我已经有一些嵌套的if语句,但我希望不间断地增加速度,例如,第一百个障碍物的速度为1000。这是我的密码:C# 循环或if语句中的增量,c#,loops,unity3d,coroutine,C#,Loops,Unity3d,Coroutine,事情是这样的。我有一个游戏,其中我有一个产卵-产卵的障碍。我想在每第五个障碍后提高速度。示例:第一、第二、第三、第四、第五个障碍物的默认速度为5,我希望第六、第七、第八、第九、第十个障碍物的速度增加到速度为10,等等。我已经有一些嵌套的if语句,但我希望不间断地增加速度,例如,第一百个障碍物的速度为1000。这是我的密码: IEnumerator SpawnObstacles() { int i = 0; do { var randomTime = Ran
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;
}
IEnumerator()
{
int i=0;
做
{
var randomTime=随机范围(minTime、maxTime);
var Random障碍=随机范围(0,障碍物长度);
产生返回新WaitForSeconds(随机时间);
var障碍=实例化(障碍[RandomBorder],transform.position,Quaternion.identity);
破坏(障碍物,10f);
i++;
如果(i>=10)
{
增加速度();
如果(i>=20)
{
增加速度();
如果(i>=30)
{
增加速度();
}
}
}
}
虽然(正确);
}
私有void递增速度()
{
障碍物obs=FindObjectOfType();
obs.speed+=5f;
}
模运算符%
有助于处理类似的问题。它给出除法运算的剩余部分,例如:
3%5 is 3
4%5 is 4
5%5 is 0
6%5 is 1
7%5 is 2
8%5 is 3
9%5 is 4
10%5 is 0
因此,如果你的x
是从0开始的,你想每5增加一次速度,你只要看看模是4
x
可以任意调高(好吧,int.MaxValue),但模永远是0..4:
//do some stuff
//should we increase speed?
if(x % 5 == 4)
IncreaseSpeed();
制作圆形阵列的便捷工具
someArray[i%someArray.Length]
永远不会越界,因为模运算的结果总是比长度小0到1之间模运算符%
有助于这样做。它给出除法运算的剩余部分,例如:
3%5 is 3
4%5 is 4
5%5 is 0
6%5 is 1
7%5 is 2
8%5 is 3
9%5 is 4
10%5 is 0
因此,如果你的x
是从0开始的,你想每5增加一次速度,你只要看看模是4
x
可以任意调高(好吧,int.MaxValue),但模永远是0..4:
//do some stuff
//should we increase speed?
if(x % 5 == 4)
IncreaseSpeed();
制作圆形阵列的便捷工具
someArray[i%someArray.Length]
永远不会越界,因为模的结果总是比长度小0到1
- 使用一个变量(可能是一个静态变量)跟踪到目前为止生成的障碍物实例的数量,并确保使用模
简单地增加每5个实例的速度。您可以在此处查看更多信息:%
//It essentially shows the rest of a division
5 / 5 == 1
//Since there's no rest there,
5 % 5 == 0
//But in the case of where there is a rest
6 / 5 == 1 (Rest 1)
//Hence
6 % 5 == 1
//Other examples :
7 % 5 == 2
8 % 5 == 3
9 % 5 == 4
10 % 5 == 0 //!! The result is back to zero here as 10/5 == 2 with no Rest
- 在对象中实现一个递归函数,该函数在具有相同属性的另一个对象中生成,但传递一个参数,该参数指示到目前为止生成了多少个实例,并检查它是否是第5个实例,如果是,则增加速度
- 使用一个变量(可能是一个静态变量)跟踪到目前为止生成的障碍物实例的数量,并确保使用模
简单地增加每5个实例的速度。您可以在此处查看更多信息:%
//It essentially shows the rest of a division
5 / 5 == 1
//Since there's no rest there,
5 % 5 == 0
//But in the case of where there is a rest
6 / 5 == 1 (Rest 1)
//Hence
6 % 5 == 1
//Other examples :
7 % 5 == 2
8 % 5 == 3
9 % 5 == 4
10 % 5 == 0 //!! The result is back to zero here as 10/5 == 2 with no Rest
- 在对象中实现一个递归函数,该函数在具有相同属性的另一个对象中生成,但传递一个参数,该参数指示到目前为止生成了多少个实例,并检查它是否是第5个实例,如果是,则增加速度
- 无论如何,在无限循环中有一个协程。。。为什么不干脆做呢
IEnumerator SpawnObstacles()
{
do
{
for(var x = 0; x < 5; x++)
{
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);
}
// These lines are automatically reached after every 5 iterations
// no need for any módulo or other magic check
Obstacle obs = FindObjectOfType<Obstacle>();
obs.speed += 5f;
}
while (true);
}
虽然对我来说,你的速度到底会增长多少还不清楚。根据您的描述,似乎您希望在每组迭代之后添加
5
。。但是,这意味着第100个对象的速度为100(20*5)。。不是你写的速度=1000,反正你在一个无限循环中有一个协程。。。为什么不干脆做呢
IEnumerator SpawnObstacles()
{
do
{
for(var x = 0; x < 5; x++)
{
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);
}
// These lines are automatically reached after every 5 iterations
// no need for any módulo or other magic check
Obstacle obs = FindObjectOfType<Obstacle>();
obs.speed += 5f;
}
while (true);
}
虽然对我来说,你的速度到底会增长多少还不清楚。根据您的描述,似乎您希望在每组迭代之后添加
5
。。但是,这意味着第100个对象的速度为100(20*5)。。不是你写的速度=1000,我能想到的最简单的事情是为产生的障碍物设置一个计数器,在速度达到5后增加速度,并将计数器重置为零。你真的不需要为了这么简单的事情去做那些花哨的事情,只要用一个if语句来检查一下柜台就行了。希望我能帮上忙,干杯 我能想到的最简单的事情就是为生成的障碍物设置一个计数器,并在速度达到5后增加速度,然后将计数器重置为零。你真的不需要为了这么简单的事情去做那些花哨的事情,只要用一个if语句来检查一下柜台就行了。希望我能帮上忙,干杯 你可以使用模来测试每5次迭代:if(i%5==0)IncreaseSpeed()
或者只是将你的速度设置为迭代次数的函数:obj.speed=(i/5)*5f
注意,你说的是每5次,但是你的if
s在每10次之后疯狂地提高速度。。(你的速度是5,5,5,5,5,5,5,5,5,5,5,15,25,35,45,55,65,75,85,95105125165…)你可以使用模来测试每5次迭代:如果(i%5==0)增加速度()
或者只是将你的速度设置为迭代次数的函数:obj.speed=(i/5)*5f
注意你说过每5次,但是你的if
s每过10秒就会疯狂地提高速度。。(你的速度是5,5,5,5,5,5,5,5,5,15,25,35,45,55,65,75,85,95105125165…)