在运行时从预制件加载的 UI 按钮上分配单击处理程序

本文关键字:按钮 分配 单击 程序 处理 UI 运行时 加载 | 更新日期: 2023-09-27 18:31:50

在Unity中,我想以这种方式创建我的UI:

  1. 创建一个UI游戏对象,其中布置了所有文本/按钮/等。
  2. 将该对象另存为预制件。
  3. 在运行时加载预制件并将其实例化,然后将其作为子项添加到父 UI 容器对象。

现在的问题是如何在运行时为按钮分配事件处理程序(因为在制作预制件时会删除检查器中分配的事件处理程序)。

我正在尝试这段代码,但它不起作用:

GameObject uiObj = ResourceUtil.InstantiatePrefab("Prefabs/UI/Main Menu UI", "UI");
uiObj.transform.SetParent(gameObject.transform, false);
Button[] buttons = uiObj.GetComponentsInChildren<Button>();
foreach (Button button in buttons)
{
    button.onClick.AddListener(() => OnUIButtonClick(button));
}
private void OnUIButtonClick(Button button)
{
    Log.Debug("OnUIButtonClick: " + button);
}

UI 预制件已成功加载和添加,但按钮在单击它们时不起作用。有人知道如何成功地做到这一点吗?

在运行时从预制件加载的 UI 按钮上分配单击处理程序

将侦听器分配给按钮组件已正确完成。我已经测试了您的代码,它对我有用。韦尔德,也许问题出在别的地方。您是否已将事件系统添加到场景中?