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

Assigning click-handler on UI buttons loaded from prefab at runtime

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

  1. 使用所有 texts/buttons/etc 创建一个 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 预制件已成功加载和添加,但按钮不会在单击它们时起作用。有人知道如何成功地做到这一点吗?

为 Button 组件分配侦听器已正确完成。我已经测试了您的代码,它对我有用。 Weard,也许问题出在其他地方。您的场景中是否添加了 EventSystem?