在运行时从预制件加载的 UI 按钮上分配点击处理程序
Assigning click-handler on UI buttons loaded from prefab at runtime
在 Unity 中,我想以这种方式创建我的 UI:
- 使用所有 texts/buttons/etc 创建一个 UI 游戏对象。放在里面。
- 将该对象保存为预制件。
- 在运行时加载预制件并实例化它,并将其作为子项添加到父级 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?
在 Unity 中,我想以这种方式创建我的 UI:
- 使用所有 texts/buttons/etc 创建一个 UI 游戏对象。放在里面。
- 将该对象保存为预制件。
- 在运行时加载预制件并实例化它,并将其作为子项添加到父级 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?