2016-05-22 63 views
0

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

因此,换句话说,我的 '论点击' 运行 'useItems()'

useItems作为跟随

private int getItems() 
{ 
    return itemsInInv.Count; 
} 
public void useItem() 
{ 
    Debug.Log(getItems()); 
    //sortItems(); 
} 
当我运行像这样

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

useItems

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


解释当我尝试从列表与UI元素在单击组件删除游戏对象的问题

的另一种方式,那火不会从列表中删除的对象的功能。它只会使用Destroy()删除显示的对象。然后在List.Count上返回0。

但如果我用一个输入做同样的代码来删除对象使用'EventSystem.current.currentSelectedGameObject'的函数,它将工作100%完美。为什么不能在OnClick的触发函数上使用相同的代码?

 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(); 
     } 

^That's the code。如果我点击一个对象后按'Z',就可以正常工作。但是,如果我直接从被触发的函数运行该代码,它将在list.count上返回0。

+0

你能张贴的OnClick在督察的屏幕截图? –

回答

0

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

那么,我实例化对象我也这样做

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