You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:07:02