unityAction期望的方法名
本文关键字:方法 期望 unityAction | 更新日期: 2023-09-27 18:17:32
你好,我遇到了一些问题。我知道这个问题对你来说很简单,但我解不出来。
public ItemList itemList;
UnityAction craft;
List<Item> items = new List<Item>();
void Start () {
items = itemList.Items;
for (int i = 0; i < 5; i++)
{
craft = new UnityAction(itemList.Craft(items[i])); //There is a problem
Transform child = transform.GetChild(i);
child.GetChild(6).GetComponent<Button>().onClick.RemoveAllListeners();
child.GetChild(6).GetComponent<Button>().onClick.AddListener(craft);
}
}
UnityAction
是一个委托:
public delegate void UnityAction();
所以,在ctor
中你需要传递一个委托。在你当前的代码中,你试图调用Craft
方法而不是传递委托。
所以,为了解决你的问题,你只需要写:
craft = new UnityAction(() => itemList.Craft(items[i]));
另一个问题:由于labmda稍后被调用,for
循环可能导致不希望的行为-我几乎可以肯定,所有Craft
调用将被调用为
itemList.Craft(items[5])
因为i
变量的最后一个值是5
(循环结束后)-是的,该值保持。所以,你还需要做:
for (int i = 0; i < 5; i++)
{
var localI = i; // copying val to local scope
craft = new UnityAction(() => itemList.Craft(items[localI]));
// other
}