Unity运行时创建的Button onClick事件绑定失效,如何正确实现?
Unity运行时生成按钮绑定点击事件失效问题
我在给运行时生成的菜单按钮绑定点击事件时遇到了问题,核心代码如下:
// 菜单其余部分围绕此组装,通过foreach循环逐个添加按钮 GameObject obj = Instantiate(quickCommandPrefab, FindCorrectHolder(c.cType).transform); // >>> 此处还有其他无问题的代码逻辑 >>> // 设置按钮点击事件 btn = obj.transform.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(delegate { CheckKeyPress(c.keyToActivate); }); // 按钮onClick事件存在问题
我试过多种类似语法都无法解决,实例化对象的组件结构正常。之后我把事件绑定逻辑抽成了单独函数,在实例化完成后调用:
void SetupButtonEvents() { foreach (Button btn in transform.GetComponentsInChildren<Button>(true)) { Button temp = btn; // 尝试使用临时变量,仍无效 string keyCode = btn.transform.Find("UseKeyText").GetComponent<TextMeshProUGUI>().text; btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(delegate { CheckKeyPress(Enum.Parse<KeyCode>(keyCode)); }); } }
通过Debug.LogWarnings调试发现,btn.onClick.GetPersistentEventCount()始终返回0。我之前要么不使用Unity事件系统,要么通过Inspector面板绑定事件,从未遇到过这类问题。
内容的提问来源于stack exchange,提问作者R Kyle Butler
相关产品推荐
相关产品推荐

