我在正确的轨道上吗 - Unity C# Events at a certain time
Posted
技术标签:
【中文标题】我在正确的轨道上吗 - Unity C# Events at a certain time【英文标题】:Am I on the right track- Unity C# Events at a certain time 【发布时间】:2021-11-27 06:27:34 【问题描述】:让我知道我是否在正确的轨道上 - 我想在游戏中的某个时间触发某些事件。例如,假设每天早上 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 但不知道为什么。
【问题讨论】:
【参考方案1】:您可以在下面的代码中使用事件,但这肯定不是最好的示例。在这样的“简单示例”中,我不会创建事件 - 只是因为它是如此简单。
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()
如果我想为“生产级别”创建它,我会创建:
表示条件和时间之间关系的类 - 应该何时触发(DT from、DT to、每天可以触发多少次等)~TaskDTCondition
存储所有条件的类 + 为它们存储事件 + 在条件有效性(DT 范围)时调用这些事件 ~ TaskScheduler
在我想要进行此类检查的课程中,我会致电 TaskScheduler
,请求在特定日期发生事件并注册我的私有方法以在该事件上调用。
对于上述情况,可能已经存在一些库,请尝试四处看看。甚至可能在 Unity 框架中(我不知道)。无论如何,这真的很广泛,如果您想了解更多详细信息,您可能希望放在不同的 SE 网站上。
【讨论】:
非常感谢您的帮助!你能解释一下为什么我必须比较现在和上午 10 点之间的时间吗?而不是仅仅在 Time.Hour ==10 或类似的时间触发事件DateTime.Now
表示 PC 中设置的当前时间。我在两者之间使用它,因为您永远无法确定您在精确的毫秒内达到了这个 - 游戏将加载或出现一些问题,并且 CPU 时间将花费在物理上。但您也希望在上午 10 点运行,而不是在 10:15、10:25 左右运行。这就是为什么我将窗口限制为 1 秒 - 在 10:00:00
和 10:00:01
之间,它可以被激活。
除此之外,你当然可以只做DateTime.Now.Hours == 10
:) 但即使在10:59:59
也可以调用它。
哦,这完全有道理!一直想知道,因为我看到人们经常这样做。非常感谢!以上是关于我在正确的轨道上吗 - Unity C# Events at a certain time的主要内容,如果未能解决你的问题,请参考以下文章