在限制范围内的随机时间更改布尔值
本文关键字:时间 布尔值 随机 范围内 | 更新日期: 2023-09-27 18:00:13
我要写的是一段代码,它将在1到3秒之间的随机时间将布尔值从true更改为false,反之亦然。我试过很多随机的方法。等等,并试图设置一个重置的计时器,但它就是不点击。我使用的是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 Switching into void Update中,它的工作原理就像我希望的那样,只是每一帧,显然不是随机的。
您可以创建一个计时器来执行此操作。
首先,使用随机数生成器生成1000到3000之间的毫秒数:
int millseconds = new Random().Next(1000, 3001);
然后创建一个计时器,该计时器将在几毫秒后启动,并为其操作指定一些设置布尔值的代码:
var callback = new Timer(dummy => { value = true; }, null, millseconds, -1);
请注意,未使用dummy
参数。将变量设置为true的操作是{ value = true; }
,它假设作用域中有一个名为value
的布尔变量。
还要注意,这个计时器的分辨率不是很高,可能不超过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();
}
}
}