在限制范围内的随机时间更改布尔值

本文关键字:时间 布尔值 随机 范围内 | 更新日期: 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();
        }
    }
}