我在正确的轨道上吗 - Unity C# Events at a certain time

Am I on the right track- Unity C# Events at a certain time

让我知道我是否在正确的轨道上 -- 我想在游戏中的特定时间触发特定事件。例如,假设每天早上 10 点我将发生事件 a、b 和 c。 我当前的代码是这样的:

public static Action<int> morningEvents = delegate { };

所以我声明了一个动作,然后声明了一些方法来检查时间并触发动作;例如

void CheckTime()
{
  check if current time is 10AM then call morningEvents()
}

我会将事件 a b c 注册到操作中

morningEvents += event a;
morningEvents +=event b;
morningEvents +=event c;

是否可以通过上述逻辑实现我的目标?我也不知道我需要在Action<>中传递什么参数。我知道默认值是 int 但不知道为什么。

您可以在下面的代码中使用事件,但这当然不是最好的例子。在这样的“简单示例”中,我不会创建事件 - 只是因为它太简单了。

public class MySampleClass : MonoBehaviour
{
    public delegate void CertainTimeReachedHandler();
    public event CertainTimeReachedHandler tenAmTimeReached;
    private bool wasReachedToday = false;

    void Start()
    {
        tenAmTimeReached += ShowClock();
        tenAmTimeReached += b();
        tenAmTimeReached += c();
    }

    void Update()
    {
        var now = DateTime.Now;
        var tenAm = DateTime.Today.AddHours(10);

        if( (!wasReachedToday) && (now > tenAm) && (now < tenAm.AddSeconds(1)) )
        {
            wasReachedToday = true;
            tenAmTimeReached?.Invoke();
        }
    }

    private void ShowClock() { }
    private void b() { }
    private void c() { }
}

如果我想为“生产级别”创建它,我会创建:

  • Class 表示条件和时间之间的关系 - 应该触发的时间(DT 从,DT 到,每天可以触发多少次等)~ TaskDTCondition
  • Class 存储所有条件 + 为它们存储事件 + 在条件有效性(DT 到达)时调用这些事件 ~ TaskScheduler
  • 在我想要进行此类检查的 类 中,我会调用 TaskScheduler,在特定日期请求一个事件并注册我的私有方法以在该事件上调用。

对于以上内容,可能已经存在一些库,请尝试四处看看。甚至可能在 Unity 框架中(我不知道)。不管怎样,这真的很广泛,如果你想了解更多细节,你会想放在不同的 SE 网站上。