如何提供按实例动态创建的单击按钮的索引?

时间:2019-05-27 17:18:32

标签: c# unity3d

  1. 我试图在Repeat(int value)中传递单击按钮的索引,并写成这样-     gp.GetComponentInChildren().onClick.AddListener(()=>     重复(rep));

  2. 但是当我单击任何按钮时,我得到了所有按钮的最后索引。 我想知道有什么办法,我可以传递在Repeat()中单击的那个按钮的索引吗?

void chatDialogs() {

        foreach (Transform child in this.transform) {
            GameObject.Destroy (child.gameObject);
        }

        for (int i = 5; i > 0 ; i--) {
            int currentStep = Laststep - i;
            if (currentStep >= 0) {
                 gp = (GameObject)Instantiate (playerPreFab);
                 gp.transform.SetParent (this.transform);
            }
            gp.GetComponentInChildren<Button> ().onClick.AddListener(() => 
            Repeat(**transform.GetSiblingIndex()**));
        }
    public void Repeat(int speakstep) {
        Application.ExternalCall("textspeak", speakstep);
    }

在Repeat()的语音步骤对象中,应传递所单击的按钮索引,但它会获得我单击的每个按钮中的最后一个索引。

1 个答案:

答案 0 :(得分:0)

我认为您可以执行以下操作:

AddButtonListener(gp.GetComponentInChildren<Button> (), i);

在您的for循环中, 当AddButtonListener定义为:

void AddButtonListener(Button b, int index)
{
    b.onClick.AddListener(()=>{Repeat(index)});
}

通过这种方式,您可以在侦听器函数中捕获按钮索引(但是我不确定该模式的正确名称是什么),而我实际上没有运行它就写了它。希望您现在有足够的信息以使其正常工作。