为什么选择UnityEvent而不是原生C#事件?

时间:2017-06-24 08:43:19

标签: c# events unity3d

我的意思是,UnityEvents比本机C#事件慢,它们仍然存储对接收器的强引用。因此,我发现在本机C#事件中使用UnityEvents的唯一有效原因是它们与编辑器的集成。 我是否忽略了

2 个答案:

答案 0 :(得分:16)

  

我忽略了什么吗?

不,你没有忽视任何东西。使用<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$1 [L] </IfModule> 的唯一优势和原因是它允许您在编辑器中使用事件。这是拖放人或编辑插件的人。

UnityEvent的另一个优点是它可以防止由于滥用委托或使用匿名委托与Unity对象而导致Unity对象无法释放的问题。虽然当它们的主脚本被破坏时它们会被释放。这是因为UnityEvent使用弱引用实现,因此删除/最小化此问题。对于使用UnityEvent而不是本地C#事件,这两件事仍然 值得。

如果您没有制作编辑器插件,则应始终使用本机事件并委托UnityEvent,因为它具有快速的性能和较小的内存使用率。有关详细信息,请参阅thisthis帖子帖子。

答案 1 :(得分:-1)

UnityEvent主要用于Unity UI系统,因为ugui需要序列化ui系统中的回调配置,例如按钮的OnClick回调。

序列化是统一游戏引擎中最重要的功能,使用内置的c#事件系统,您无法进行序列化。

因此,如果您使用统一的UI系统,则必须使用UnityEvent,如果要序列化回调函数配置,则必须使用UnityEvent。

在其他情况下,只需使用c#内置事件即可。