【发布时间】:2018-04-16 05:54:02
【问题描述】:
我正在寻找支持协程执行的 C# EventManager,例如 this one。换句话说,我希望能够执行以下操作:
EventManager.StartListening("AString", ACoroutine);
我知道我可以将协程包装在一个函数中并使用当前版本的代码,但如果代码本身支持这一点以避免脏代码会更好。
【问题讨论】:
-
简短回答:我不知道有什么内置的,但没有什么能阻止你自己写一个。但是,我建议只使用@Everts 的建议;当有一个外部系统为其他对象启动协程时,会有很多潜在的问题。
-
你能给我举个例子吗,这样我就可以理解像这样的外部系统会遇到什么?
-
当然。想象你有一个类,
Foo,派生自MonoBehaviour,定义了一个IEnumerator,IEnumerator Bar(),可以作为协程运行。如果Foo.Bar()内部的任何东西访问了与它所附加的GameObject相关的东西(比如它的Transform),那么如果GameObject在Bar()仍在运行时被销毁(这是可能的),您将获得异常如果外部系统启动了协程)。如果Foo类本身调用了StartCoroutine(Bar()),那么当对象被销毁时,该协程会自动销毁。
标签: c# events unity3d coroutine