您好我试图将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;
}
}
Theese的功能在另一个剧本中。
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;
}
如果有数据,我怎么能只更新数据呢?无需按两次加载按钮。
答案 0 :(得分:0)
根据docs,您应该将www变量包装在using语句中,以便正确处理。然后收益率,就像这样:
using (WWW www = new WWW(url))
{
yield return www;
string _return = www.text;
LoadedData = _return;
}
我不确定您的意思是“只有在有数据时才更新数据”。您是否有更多代码可以帮助澄清您的意图?
答案 1 :(得分:-1)
在 loadData()中使用StartCoroutine创建新线程,您可以在其中等待某些内容而不会阻止主线程。然后在此例程中使用WaitUntil函数等待数据存在。
public void loadData()
{
GetComponent<SavingLoading>().Load(GameObject.Find("LoginSystem").GetComponent<LoginSystem>().Username);
StartCoroutine(() => {
yield return new WaitUntil(() => 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;
});
}
如果已经调用 loadData(),请记住添加某种检查。否则你可能最终会有一堆等待没有理由的线程。