我目前正在制作益智游戏,并尝试制作自动更新程序。因此,用户无需手动下载最新版本即可更新游戏。版本检查本身正在运行,但是当我尝试使用WWW(url)下载文件时,下载需要相当长的时间,但是一旦我在文件浏览器中检查它就创建了一个0字节的文件。在OSX中,它实际上会立即被删除。
这是我正在使用的代码。
void UpdateGame(){
string path = Application.dataPath;
if (Application.platform == RuntimePlatform.OSXPlayer) {
path += "/../../";
}
else if (Application.platform == RuntimePlatform.WindowsPlayer) {
path += "/../";
}
if (System.IO.File.Exists (path+"/Apo_Alpha.app")) {
Debug.Log ("File exists!");
System.IO.File.Delete (path+"/Apo_Alpha.app");
}
WWW www = new WWW ("https://www.dropbox.com/sh/aayo9iud7t98hgb/AACDqSST_-rT2jIfxq1Zc2SXa?dl=1");
while (!www.isDone) {
Debug.Log ("Waiting for download");
}
string fullPath = path+"/Apo_Alpha.app";
System.IO.File.WriteAllBytes (fullPath, www.bytes);
Debug.Log ("Done downloading...");
Debug.Log ("File downloaded at " + fullPath);
}
为什么会这样?是因为我可能要等待写入这些字节吗?我很乐意在这里得到某种形式的帮助。我确定这只是一个小错误,但我无法在任何地方找到答案。 (网址是正确的,我仔细检查过它们......)
答案 0 :(得分:0)
当我尝试使用WWW(url)下载文件时,它需要相当多 一段时间下载
那是因为你阻止了主线程。这应该在协程中完成。
UploadedFile
然后使用IEnumerator downLoadFromServer()
{
WWW www = new WWW("yourUrl");
yield return www;
Debug.Log("Done downloading");
byte[] yourBytes = www.bytes;
System.IO.File.WriteAllBytes(fullPath, yourBytes);
}
现在,如果你想使用StartCoroutine(downLoadFromServer());
,你必须在coroutine函数中产生,或者Unity主线程将冻结,直到文件被下载。
以下是应如何使用www.isDone
的示例:
www.isDone
最后,不要手动创建路径。不要做这样的事情:
IEnumerator downLoadFromServer()
{
string url = "https://www.dropbox.com/sh/aayo9iud7t98hgb/AACDqSST_-rT2jIfxq1Zc2SXa?dl=1";
WWW www = new WWW(url);
while (!www.isDone)
{
//Must yield below/wait for a frame
yield return null;
}
Debug.Log("Done downloading");
byte[] yourBytes = www.bytes;
//Now Save it
System.IO.File.WriteAllBytes(fullPath, yourBytes);
}
使用path += "/../";
执行此操作:
Path.Combine