使用UnityEventTools.RemovePersistentListener

时间:2016-09-26 13:58:24

标签: unity3d

我正在创建一个编辑器脚本,用于创建UI按钮并添加带参数的侦听器。我已经完成了。现在,我想用代码删除监听器。

对此的统一文档没有多大帮助。

代码:

GameObject my_UIPanel;

// Destroy panel and buttons that were created previously.

my_UIPanel = GameObject.Find ("Panel_RoomButtons");
Button[] myBtns = my_UIPanel.GetComponentsInChildren<Button> ();
foreach (Button myBtn in myBtns) 
{
    // This is the thing giving me a headache. Rest everything works fine.
    UnityEventTools.RemovePersistentListener(myBtn.onClick, myUIManager.DEV_myFunction); 
}
if (my_UIPanel != null) 
    DestroyImmediate (my_UIPanel);

// Create new panel and buttons.

my_UIPanel = Instantiate(Pnl_RoomBtnsPrefab) as GameObject;

foreach (GameObject emptyLocation in teleLocations) 
{
    GameObject myBtnGO = Instantiate (teleBtnPrefab) as GameObject;
    myBtnGO.name = emptyLocation.name + "Btn";
    myBtnGO.transform.SetParent (my_UIPanel.transform, false);
    GameObject currentGO = emptyLocation;
    Button myBtn = myBtnGO.GetComponent <Button> ();
    UnityEventTools.AddObjectPersistentListener(myBtn.onClick, myUIManager.DEV_myFunction, currentGO);
}

如果你能帮助我解决这个问题,我将非常感谢你的帮助。

谢谢!

编辑:这些是我得到的错误

Assets / Scripts / RIGScripts / Editor / WorkspaceSetupEditor.cs(247,65):错误CS1502:最好的重载方法匹配`UnityEditor.Events.UnityEventTools.RemovePersistentListener(UnityEngine.Events.UnityEventBase,int)&#39;有一些无效的论点

Assets / Scripts / RIGScripts / Editor / WorkspaceSetupEditor.cs(247,65):错误CS1503:参数#2' cannot convert方法组&#39;表达式输入`int&#39;

在这一行:

UnityEventTools.RemovePersistentListener(myBtn.onClick, myUIManager.DEV_myFunction);

3 个答案:

答案 0 :(得分:0)

尝试使用特定的课程ButtonClickedEvent

删除听众:

myBtn.onClick.RemoveListener(methodName);

myBtn.onClick.RemoveAllListeners();

添加监听器:

myBtn.OnClick.AddListener(methodName);

Read More

更新:

对于编辑模式:

试试这个:

UnityEventTools.AddPersistentListener(myBtn.onClick, new UnityAction(methodName));

答案 1 :(得分:0)

好吧,我之前没有意识到这一点。我得到了它的工作。

UnityEventTools.RemovePersistentListener(myBtn.onClick, 0);

我应该传递方法的索引而不是方法名称。

谢谢你们!

答案 2 :(得分:0)

我遇到了同样的问题。

试试这个:

UnityEventTools.RemovePersistentListener<TYPE_OF_PARAMETER>(myBtn.onClick, myUIManager.DEV_myFunction);

这是我案例中的解决方案:)