我的意思是,UnityEvents 比原生 C# 事件慢,而且它们仍然存储对接收器的强引用。因此,我能找到在原生 C# 事件上使用 UnityEvents 的唯一正当理由是它们与编辑器的集成。 我是不是忽略了什么?
最佳答案
Am I overlooking something?
不,你没有忽略任何东西。使用 UnityEvent
的唯一优势和原因是它允许您在编辑器中使用事件。这适用于拖放人员或制作编辑器插件的人员。
UnityEvent
的另一个优点是它可以防止由于滥用委托(delegate)或使用匿名委托(delegate)与 Unity 对象而导致的 Unity 对象未被释放的问题。尽管当持有它们的主脚本被销毁时,它们会被释放。这样做的原因是因为 UnityEvent
是用弱引用实现的,因此消除/最小化了这个问题。这两件事仍然不值得在原生 C# 事件上使用 UnityEvent
。
如果您不制作编辑器插件,您应该始终使用原生事件并委托(delegate) UnityEvent,因为它具有快速的性能和较小的内存使用量。参见 this和 this发布帖子以获取更多信息。
关于c# - 为什么选择 UnityEvent 而不是原生 C# 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44734580/