函数在Unity3D中传递变量的先前值而不是当前值

时间:2017-03-06 04:07:44

标签: c# function unity3d

我目前正在开发一个应用程序,用户可以在其中查看所有产品,可以查看单个产品并可以下载特定产品。

这是我的代码:

IEnumerator ButtonClicked(int num, string name, string url, string color, string size, string price, string description)
{
    prodName.text = name.ToString ();
    prodColor.text = color.ToString ();
    prodSize.text = size.ToString ();
    prodPrice.text = price.ToString ();
    prodDesc.text = description.ToString ();

    string Url = url; 
    WWW www = new WWW (Url);
    yield return www;
    Texture2D texture = www.texture;

    Image img = prodImg.GetComponent<Image> ();
    img.sprite = Sprite.Create (texture, new Rect (0, 0, texture.width, texture.height), Vector2.zero);

    string name2 = name.ToString ();
    Debug.Log (name2.ToString ());
    downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString ())));

}


IEnumerator onDownloadClick(string name) {

    using (IDbConnection dbConnection = new SqliteConnection (conn)) {
        dbConnection.Open ();
        using (IDbCommand dbCmd = dbConnection.CreateCommand ()) {
            string sqlQuery = String.Format ("INSERT INTO PRODUCTS(Name) VALUES(\"{0}\")", name); 
            dbCmd.CommandText = sqlQuery;

            dbCmd.ExecuteScalar ();
            dbConnection.Close ();
        }


    }
    yield return new WaitForSeconds (.1f);
    Debug.Log (name.ToString ());

}

在ButtonClicked函数上,它只返回一个值,但是当onDownloadClick函数时,显示当前值和所有前一个值。什么似乎是问题?谢谢!

1 个答案:

答案 0 :(得分:0)

Button.onClick是一个ButtonClickedEvent,它将保存“侦听器”,然后在被告知时(即,单击拥有UnityEngine.UI.Button时)调用它们。如果您从未取消订阅,“听众”列表将会累积;您只是通过AddListener添加到列表中:

downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString ())));

尝试清除ButtonClickedEvent对象,然后再添加新的侦听器:

downloadButton.onClick.RemoveAllListeners();
downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString ())));