unity3d UnityEventTools.AddPersistentListener未按预期运行

2w3kk1z5  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(206)

UnityEvent.AddPersistentListener出现问题。我尝试从自定义编辑器订阅UnityEvent的函数。订阅事件的函数从继承自编辑器的自定义编辑器脚本调用,并且在正常类结构中调用。我尝试时遇到错误,这使我认为是语法错误,但我无法确定。
下面是我的代码

UnityEditor.Events.UnityEventTools.AddPersistentListener(targetEvent,  delegate { UpdateAndRunPromptById(id); });

我收到此错误:

Could not register callback <UpdateSubscribedEvents>b__0 on . The class null does not derive from UnityEngine.Object

有人知道为什么会发生这种情况以及如何解决吗?

u7up0aaq

u7up0aaq1#

persistent侦听器就是这样一个侦听器,正如其名称所示,它将被持久地序列化为公开UnityEvent的任何人。

为了添加一个持久性回调,因为错误告诉你要调用的方法的“所有者”需要是一个UnityEngine.Object,就像你通过检查器以“正常”的方式添加持久性回调一样。
该方法需要遵循相同的规则,以便正确地序列化到公开/序列化UnityEvent的任何人。

  • 实现类型需要是UnityEngine.Object
  • 方法必须为public
  • 它不能是匿名/delegate/lambda
  • 参数必须与动态事件类型匹配,或者可以序列化到回调中

是否有特定的原因需要使用持久回调?

ar7v8xwq

ar7v8xwq2#

我找到了一个适合我的解决方案。在文档中我发现有AddIntPersistentListenerAddStringPersistentListenerAddBoolPersistentListenerAddFloatPersistentListener用于简单的1参数函数,所以我没有定义委托(我意识到这是导致错误的原因),而是根据需要使用特定的侦听器。

UnityEditor.Events.UnityEventTools.AddIntPersistentListener(targetEvent, UpdateAndRunPromptById, <int>);
UnityEditor.Events.UnityEventTools.AddStringPersistentListener(targetEvent, SetGlobalFlag, <string>);
UnityEditor.Events.UnityEventTools.AddBoolPersistentListener(targetEvent, DisplayInformation, <bool>);

希望这能帮助到任何需要它的人。

相关问题