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

时间:2016-01-24 17:55:49

标签: c# user-interface unity3d event-handling game-engine

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

  1. 创建一个包含所有文本/按钮/等的UI游戏对象。在其中布置。
  2. 将该对象保存为预制件。
  3. 在运行时加载预制件并实例化它,并将其作为子项添加到父UI容器对象。
  4. 现在的问题是如何在运行时为按钮分配事件处理程序(因为在制作预制件时检查器中已分配的事件处理程序会被删除)。

    我正在尝试使用此代码,但它无效:

    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预制件,但按钮不会单击它们。有人知道如何成功地做到这一点吗?

1 个答案:

答案 0 :(得分:0)

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