Unity OnClick()

时间:2016-05-22 06:40:49

标签: c# unity3d unity5

当我使用' On Click()'我试图获得数组的大小。按钮的组成部分。 void运行(打印我的Debug.Log),但它返回我的数组0.当我使用Input.GetKeyDown读取同一实例中的计数大小时,它返回正确的值。但是,当我尝试使用相同的功能时,KeyDown正在运行,并点击了“点击”()'组件返回0;

换句话说,我的点击'正在运行' useItems()'

useItems如下

private int getItems()
{
    return itemsInInv.Count;
}
public void useItem()
{
    Debug.Log(getItems());
    //sortItems();
}

当我像这样运行useItems时

        if (Input.GetKeyDown(KeyCode.T))
        {
            useItem();
        }

它返回值perfect,但是当我从对象的On Click组件引用它时,它返回0作为Count大小。

解释问题的另一种方式

当我尝试从具有UI元素On Click组件的列表中删除GameObject时,触发的函数不会从列表中删除该对象。它只会使用Destroy()删除显示的对象。然后将在List.Count上返回0。

但是,如果我使用输入相同的代码来触发一个函数来使用' EventSystem.current.currentSelectedGameObject'它将100%完美。为什么不同的确切代码适用于On Click的触发函数?

        if (Input.GetKeyDown(KeyCode.Z))
        {
            var obj = EventSystem.current.currentSelectedGameObject;
            Destroy(obj);
            itemsInInv.Remove(obj.gameObject);
            Debug.Log(itemsInInv.Count);
            Debug.Log("You used a " + obj.name);
            sortItems();
        }

^那就是代码。如果我推动' Z'点击一个对象后。但是如果我直接从被激活的函数运行该代码,它将在list.count上返回0。

1 个答案:

答案 0 :(得分:0)

我无法找到问题的解决方案并且不知道问题是什么,但是我手动添加了一个事件监听器来监听特定的功能,而不是使用检查器上的内置监听器。

所以在我实例化对象时我也做了这个

items.GetComponent<Button>().onClick.AddListener(() => { useItem(); });