【问题标题】:c# Wait until co routine is finished before executing code [duplicate]c#等到coroutine完成后再执行代码[重复]
【发布时间】:2018-06-15 18:24:57
【问题描述】:

您好,我正在尝试将 sql 数据库中的保存/加载到我的游戏中。 除了我需要两次加载才能加载数据这一事实之外,我已经完成了所有工作。

设置数据的代码在我有机会设置之前完成。

public void loadData()
{
    GetComponent<SavingLoading>().Load(GameObject.Find("LoginSystem").GetComponent<LoginSystem>().Username);

    if (GetComponent<SavingLoading>().LoadedData != "")
    {
        string[] Data = GetComponent<SavingLoading>().LoadedData.Split(',');

        Level = Convert.ToInt32(Data[0]);
        CurrentXp = Convert.ToInt32(Data[1]);
        currentHealth = Convert.ToInt32(Data[2]);
        maxHealth = Convert.ToInt32(Data[3]);

        Vector3 LoadedPos = new Vector3(Convert.ToSingle(Data[4]), Convert.ToSingle(Data[5]), Convert.ToSingle(Data[6]));
        transform.position = LoadedPos;
    }
}

这些函数在另一个脚本中。

public void Load(string name)
{
    StartCoroutine(LoadCall(name));
}



IEnumerator LoadCall(string name)
{
    WWWForm form = new WWWForm();
    form.AddField("name", name);

    WWW www = new WWW(LoadPhP, form);
    yield return www;
    string _return = www.text;
    LoadedData = _return;
}

如果存在数据,我怎样才能只更新数据?无需按两次加载按钮。

【问题讨论】:

  • 您想等到协程完成后?将该代码放入协程中或添加回调函数参数。

标签: c# php mysql unity3d


【解决方案1】:

根据docs,您应该将 www 变量包装在 using 语句中以便正确处理。然后 yield return 就可以了,像这样:

using (WWW www = new WWW(url))
{
    yield return www;
    string _return = www.text;
    LoadedData = _return;
}

我不确定您所说的“仅在存在数据时才更新数据”是什么意思。您是否有更多代码可以帮助阐明您的意图?

【讨论】:

  • 虽然可能准确,但实际上并不能回答他们的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多