我正在创建一个编辑器脚本,用于创建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);
答案 0 :(得分:0)
尝试使用特定的课程ButtonClickedEvent
。
删除听众:
myBtn.onClick.RemoveListener(methodName);
或
myBtn.onClick.RemoveAllListeners();
添加监听器:
myBtn.OnClick.AddListener(methodName);
对于编辑模式:
试试这个:
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);
这是我案例中的解决方案:)