当我使用' 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。
答案 0 :(得分:0)
我无法找到问题的解决方案并且不知道问题是什么,但是我手动添加了一个事件监听器来监听特定的功能,而不是使用检查器上的内置监听器。
所以在我实例化对象时我也做了这个
items.GetComponent<Button>().onClick.AddListener(() => { useItem(); });