Возникли проблемы с использованием WebClient для загрузки файлов в Unity - PullRequest
0 голосов
/ 11 ноября 2019

Так что у меня большая проблема при написании кода для Unity. Я очень новичок в C # и поэтому использовал примеры, которые я нашел в Интернете, чтобы сделать этот код. Моя единственная проблема в том, что нет никаких ошибок, но файл не будет загружен должным образом.

Я использую этот код, чтобы мои пользователи могли легко импортировать пакеты Unity, которые они часто используют. У меня есть кнопка, которая работает как задумано, она показывает загрузку и затем изменяет импорт, если файл существует. Однако, если я щелкну по нему, когда появится надпись «Загрузка», он сразу же скажет «Загрузка завершена», и файл не появится в течение нескольких минут. Когда это наконец делает файл размером 0 КБ.

Мне действительно нужна помощь, чтобы выяснить, почему мой файл загружается неправильно. Я очень тупой.

Этот код является сценарием для WebClient.

using UnityEngine;
using System.IO;
using System.Net;
using System;
using System.ComponentModel;
using UnityEditor;      

namespace SentinelsSDK
{
public class SentinelsSDK_ImportManager
{
    private static string localPath = "Assets/VRCSDK/Dependencies/VRChat/Imports/";
    private static string localDownloadPath = "Assets/VRCSDK/Dependencies/VRChat/Imports/";
    private static string urlStart = "https://www.sentinels.xyz/uploads/2/0/9/0/20909832/";

    public static void DownloadAndImportAssetFromServer(string assetName)
    {
        if (File.Exists(localDownloadPath + assetName))
        {
            sentLog(assetName + " exists. Importing it..");
            importDownloadedAsset(assetName);
        }
        else
        {
            sentLog(assetName + " does not exist. Starting download..");
            downloadFile(assetName);
        }
    }

    private static void downloadFile(string assetName)
    {
        WebClient w = new WebClient();
        w.Headers.Set(HttpRequestHeader.UserAgent, "Webkit Gecko wHTTPS (Keep Alive 55)");
        w.QueryString.Add("assetName", assetName);
        w.DownloadFileCompleted += fileDownloadCompleted;
        w.DownloadProgressChanged += fileDownloadProgress;
        string url = urlStart + assetName;
        w.DownloadFileAsync(new Uri(url), localDownloadPath + assetName);
    }

    private static void fileDownloadCompleted(object sender, AsyncCompletedEventArgs e)
    {
        string assetName = ((WebClient)(sender)).QueryString["assetName"];
        sentLog("Download of file " + assetName + " completed!");
    }

    private static void fileDownloadProgress(object sender, DownloadProgressChangedEventArgs e)
    {
        sentLog("Progress is at " + e.ProgressPercentage.ToString() + "%");
    }

    private static void sentLog(string message)
    {
        Debug.Log("[SentinelsSDK] AssetDownloader: " + message);
    }

    public static void importAsset(string assetName)
    {
        AssetDatabase.ImportPackage(localPath + assetName, true);
    }

    public static void importDownloadedAsset(string assetName)
    {
        AssetDatabase.ImportPackage(localDownloadPath + assetName, true);
    }
}

}

Этот код является кнопкойвызывая загрузку из моего другого скрипта.

using SentinelsSDK;
    ...
    private static string localDownloadPath = "Assets/VRCSDK/Dependencies/VRChat/Imports/";
    ...
    GUILayout.BeginHorizontal();
    if (GUILayout.Button((File.Exists(localDownloadPath + "poiyomitoon.unitypackage") ? "Import" : "Download") + " - Poiyomi Toon"))
      {
          SentinelsSDK_ImportManager.DownloadAndImportAssetFromServer("poiyomitoon.unitypackage");
      }
    GUILayout.EndHorizontal();

1 Ответ

0 голосов
/ 12 ноября 2019

Итак, я выяснил свою проблему, но я не уверен, почему это была проблема. Видимо, вместо «http://"» вместо «https://"» было указано «*1001*», несмотря на то, что вы могли загружать файл в обычном режиме независимо от используемого протокола. Если кто-то может помочь мне понять, почему это так, я был бы признателен!

...