在Unity3D C#中将新脚本附加到按钮的onclick事件

6
我正在使用C#创建一个新的游戏对象,并尝试在单击时执行脚本。以下是代码。
我正在使用C#创建一个新的游戏对象,并尝试在单击时执行脚本。以下是代码。
    public void createButton(){
            GameObject kGO = new GameObject ();
            kGO.transform.parent = kCanvas.transform;
            kGO.AddComponent<Image>();
            Button btn = kGO.AddComponent<Button>();
            btn.onClick.AddListener(onButtonClick);
    }

    public void onButtonClick(){
        Debug.Log ("clicked");
    }

但是这个脚本没有起作用,按钮上没有任何附加的脚本。 enter image description here
我也尝试过这些方法。
btn.onClick.AddListener(() => {onButtonClick()});
or
btn.onClick.AddListener(() => {onButtonClick();});
or
btn.onClick.AddListener(() => onButtonClick());

但是什么都没用。

3个回答

3

我已将Unity升级到5.1.2,现在它正常工作。但是它在用户界面中仍未反映出来,有些人说非持久的Unity事件不会反映在用户界面中,我认为这是真的。


1
你在这里尝试的是在运行时添加回调。如果你想在设计时添加回调,你应该点击编辑器中 On Click 部分右下角的小加号,然后选择处理回调的对象以及按钮应调用哪个函数。

我知道这一点,但我需要在运行时调用它。 - Neeraj Kumar

1
我这样做。这是一个lambda表达式。
 btn.onClick.AddListener(() =>
            {
                Debug.Log("IT WORKS");
// Just handle the button clikc inside here
            });

或者您可以尝试完全不同的方法:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
    public class TapOnNumber : MonoBehaviour, IPointerClickHandler {


        public void OnPointerClick(PointerEventData e)
        {
           //HandleClicks here
    }

那也不起作用,你使用的是哪个版本的Unity?这个脚本似乎在4.6中可以工作。我正在使用5.0.0p3。 - Neeraj Kumar
我正在使用4.6版本。遗憾的是,我不了解5.x版本,他们可能已经改变了一些东西。它是否给你报错?这可能有助于我理解发生了什么。 - Uri Popov
@Neeraj Kumar,我更新了我的答案,提供了一个可能有效的不同方法。 - Uri Popov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接