unity OnClick()

Unity OnClick()

我在使用按钮的 'On Click ()' 组件时试图获取数组的大小。 void 运行s(打印我的 Debug.Log)但它 returns 我的数组为 0。当我使用 Input.GetKeyDown 读取同一实例中的计数大小时,它 returns 是正确的值。但是当我尝试使用相同的精确功能时,KeyDown 是 运行ning 扔了 'On Click ()' 组件它 [​​=42=]s 0;

所以换句话说,我的'On Click'是运行宁'useItems()'

useItems 如下

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

当我 运行 使用这样的物品时

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

它 return 是完美的值,但是当我从对象上的“单击”组件引用它时,它 returns 0 作为计数大小。


另一种解释问题的方法

当我尝试使用 UI 元素单击组件从列表中删除游戏对象时,触发的函数不会从列表中删除对象。它只会使用 Destroy() 删除显示的对象。然后将return0放在List.Count.

但是,如果我使用输入执行相同的代码以使用 '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',效果很好。但是,如果我 运行 该代码直接来自触发的函数,它将 return 0 在 list.count.

我找不到问题的解决方案,也不知道问题出在哪里,但我手动添加了一个监听特定功能的事件监听器,而不是使用检查器中的内置监听器。

所以我在实例化对象的地方也这样做了

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