无法隐式转换类型`UnityEngine.Events.UnityAction<string>'为`UnityEngine.Events.UnityAction'

4
我想通过标准的Unity监听器发送参数,就像教程中所述。
mbListener = new UnityAction<string>(SomeFunction);

void SomeFunction(string _message)
{
    Debug.Log ("Some Function was called!");
}

为什么会出现上述错误信息?顺便说一下,我寻求的是实用性答案,而不是技术术语。
(Unity自己的手册中说它可以处理参数,但我无法弄清楚为什么会出错。)

mbListener的类型是什么?它是UnityAction吗?(非泛型) - Szabolcs Dézsi
private UnityAction mbListener; - Philip
好的,基于这个假设已经得出了答案,所以应该会有所帮助。 - Szabolcs Dézsi
它有时候可以,有时候不行——事件管理器类只允许没有参数的UnityActions……我以为使用带参数的侦听器会允许在AddListener函数中传递参数。 - Philip
1个回答

2

你声明 mbListener 为什么类型?很可能是 UnityAction 类型。将其声明为 UnityAction 并使用 UnityAction<string> 进行赋值会导致问题。

根据你的需求,你可以通过以下两种方式来解决 -

UnityAction<string> mbListener = new UnityAction<string>(SomeFunction);

或者
UnityAction mbListener = new UnityAction(SomeFunction);
void SomeFunction()
{
    Debug.Log ("Some Function was called!");
}

编辑 正如@MotoSV指出的那样...你应该用mbListener("字符串参数");来调用它。

mbListener是任何你想要调用的函数/监听器的占位符。当你需要调用它时,只需调用UnityAction变量并将参数传递给它即可。因此,mbListener("字符串参数");会为您工作。


UnityAction<string> mbListener = new UnityAction<string>(SomeFunction);清除了错误,但我如何使用字符串参数调用侦听器? - Philip
mbListener("你的字符串参数"); - MotoSV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接