我在正确的轨道上吗 - 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 网站上。
让我知道我是否在正确的轨道上 -- 我想在游戏中的特定时间触发特定事件。例如,假设每天早上 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 网站上。