我想写的是一段代码,它会将bool的值从true更改为false,反之亦然,在1到3秒之间的随机时间。我尝试过很多随机使用的方法。等,并试图设置一个重置的计时器,但它不会点击。我使用的是我很新的c#,所以我不确定这是一个简单的技巧还是更复杂的东西。 无论如何,任何论坛或视频都非常受欢迎。
//
我尝试使用Matthew提供的代码,但它引发了很多错误。我正在使用团结5,这可能是问题所在。 无论如何,我尝试使用以下代码。
bool switchSpawning = false; void Update () { if (switchSpawning == false) { transform.position = spawnPosition; } else if (switchSpawning == true) { transform.position = spawnPosition2; } } void Switching (){ // works in void update - runs at every frame System.Random rnd = new System.Random (); int num = rnd.Next(0,10); //random number between 0 and 10 if (num < 5) { switchSpawning = false; Debug.Log("False"); } else if (num > 5) { switchSpawning = true; Debug.Log("True"); } }
如果我将代码放在void中切换到void更新它的工作方式正如我想要的那样,显然不是在随机时间。
答案 0 :(得分:1)
您可以创建一个计时器来执行此操作。
首先,使用随机数生成器生成1000到3000之间的毫秒数:
int millseconds = new Random().Next(1000, 3001);
然后创建一个在很多毫秒后将触发的计时器,并为其操作指定一些将设置布尔值的代码:
var callback = new Timer(dummy => { value = true; }, null, millseconds, -1);
请注意,未使用dummy
参数。将变量设置为true的操作是{ value = true; }
,它假定在范围内有一个名为value
的bool变量。
另请注意,此计时器的分辨率不是很高 - 可能不超过10-20ms,但对于随机间隔可能无关紧要。
将它们放在一个简单的控制台应用程序中,可以得到以下结果:
using System;
using System.Threading;
namespace Demo
{
public class Program
{
private static void Main()
{
bool value = false;
int millseconds = new Random().Next(1000, 3001);
var callback = new Timer(dummy => { value = true; }, null, millseconds, -1);
for (int i = 0; i < 100; ++i)
{
Thread.Sleep(100);
Console.WriteLine(value);
}
callback.Dispose();
}
}
}