我的意思是,UnityEvents比本机C#事件慢,它们仍然存储对接收器的强引用。因此,我发现在本机C#事件中使用UnityEvents的唯一有效原因是它们与编辑器的集成。 我是否忽略了?
答案 0 :(得分:16)
我忽略了什么吗?
不,你没有忽视任何东西。使用<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
的唯一优势和原因是它允许您在编辑器中使用事件。这是拖放人或编辑插件的人。
UnityEvent
的另一个优点是它可以防止由于滥用委托或使用匿名委托与Unity对象而导致Unity对象无法释放的问题。虽然当它们的主脚本被破坏时它们会被释放。这是因为UnityEvent
使用弱引用实现,因此删除/最小化此问题。对于使用UnityEvent
而不是本地C#事件,这两件事仍然 值得。
如果您没有制作编辑器插件,则应始终使用本机事件并委托UnityEvent,因为它具有快速的性能和较小的内存使用率。有关详细信息,请参阅this和this帖子帖子。
答案 1 :(得分:-1)
UnityEvent主要用于Unity UI系统,因为ugui需要序列化ui系统中的回调配置,例如按钮的OnClick回调。
序列化是统一游戏引擎中最重要的功能,使用内置的c#事件系统,您无法进行序列化。
因此,如果您使用统一的UI系统,则必须使用UnityEvent,如果要序列化回调函数配置,则必须使用UnityEvent。
在其他情况下,只需使用c#内置事件即可。