2017-02-24 4 views
0

Ich baue eine App in Einheit (5.4.0f3) für die Windows Store-Plattform (Universal 10 SDK). Ich werde es auf Hololens laufen lassen.WebClient-Klasse im Build für Windows Store - Buildfehler in Unity

Ich habe ein Problem bei der Kompilierung meiner Skripts, und es scheint, dass es auf die verwendete WebClient-Klasse zurückzuführen ist. Ich habe auch versucht, HttpClient wie in einem anderen Post empfohlen, aber kein Glück. Ich habe einige Personen gesehen, die erfolgreich mit der WebClient-Klasse in Unity erstellt haben, aber ich vermute, dass sie nicht für den Windows Store erstellt wurden.

Die Kompilierung Fehler Ich erhalte: Fehler CS0246: Der Typ oder Namespace-Name ‚WebClient‘ konnte nicht gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?) Der Name ‚Webclient‘ existiert nicht in der aktuelle Kontext

Ich habe gerade angefangen, mit Unity zu arbeiten, aber ich glaubte, dass ich einige Direktiven um den Code hinzufügen könnte, der den WebClient verwendet oder einen neuen WebClient deklariert, damit er noch kompiliert und auf den Hololens ausgeführt werden kann .

Ich fand die "Platform dependent Compilation" Seite (https://docs.unity3d.com/Manual/PlatformDependentCompilation.html), die dies zu erklären schien. Ich habe versucht, einige von ihnen (zum Beispiel UNITY_WSA, UNITY_WSA_10_0 usw.), aber kein Glück. Ich verwende die Yahoo Finance API derzeit auf folgende Weise: webClient.DownloadFile(url, stockFile);, die eine .csv Datei herunterlädt. Irgendwelche Vorschläge?

Antwort

0

Ich habe festgestellt, dass Sie WebClient.DownloadFile verwendet haben. Sie sollten nicht verwenden Sie die DownloadFile Funktion, da dies Block warten wird, bis die Datei den Download abgeschlossen hat. Was diesmal passiert ist, dass die Benutzeroberfläche eingefroren wird, da der Haupt-Thread blockiert ist. Wenn Sie die API WebClient verwenden möchten, sollte die DownloadFileAsync-Funktion verwendet werden. Here ist ein Beispiel dafür, wie man das macht.

Sie können WebClient auf anderen Plattformen als Hololens verwenden. Sie können dann oder UnityWebRequest auf hololens verwenden und dann File.WriteAllBytes verwenden, um die Datei zu speichern, nachdem sie den Download beendet hat.

Der Pseudo-Code sollte wie folgt aussehen:

#if !UNITY_WSA_10_0 
WebClient API 
#else 
WWW API 
#endif 

komplette Code:

string url = "http://www.yourUrl.com"; 
string savePath = Path.Combine(Application.dataPath, "file.txt"); 
int downloadID = 0; 

#if !UNITY_WSA_10_0 
//Will be used on Platforms other than Hololens 
void downloadFile() 
{ 
    WebClient webClient = new WebClient(); 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DoSomethingOnFinish); 
    webClient.QueryString.Add("fileName", downloadID.ToString()); 
    Uri uri = new Uri(url); 
    webClient.DownloadFileAsync(uri, savePath); 
    downloadID++; 
} 

void DoSomethingOnFinish(object sender, AsyncCompletedEventArgs e) 
{ 
    string myFileNameID = ((System.Net.WebClient)(sender)).QueryString["fileName"]; 
} 

#else 
//Will be used on Hololens 
void downloadFile() 
{ 
    StartCoroutine(downloadFileCOR()); 
} 

IEnumerator downloadFileCOR() 
{ 
    WWW www = new WWW(url); 
    yield return www; 

    Debug.Log("Finished Downloading file"); 

    byte[] yourBytes = www.bytes; 

    //Now Save it 
    System.IO.File.WriteAllBytes(savePath, yourBytes); 
} 
#endif 

Nutzungs:

downloadFile(); 

Wenn Sie noch Fehler erhalten dann auch Sie verwenden Namensraum, der auf Hololens nicht unterstützt wird. Sie sollten das genauso gut handhaben. Lassen Sie sich, dass die namepsace System.Net; ist, können Sie es wie unten beheben:

#if !UNITY_WSA_10_0 
using System.Net; 
#endif 
+0

genial dies funktioniert! Wie kann ich feststellen, ob Coroutine zurückgekehrt ist? – user3501476

+0

Verwenden Sie "Aktion", um das zu tun. Werfen Sie einen Blick auf [this] (http://stackoverflow.com/a/30270515/3785314). Wenn Sie immer noch verwirrt sind, stellen Sie bitte eine neue Frage. – Programmer

0

als Programmierer in seiner Antwort erwähnt, webclient nicht auf der HoloLens Plattform existiert, neben Ihre eigenen rollen, als er eine weitere Alternative vorgeschlagen ist, einen zu verwenden, der Clients, die im Unity Asset Store verfügbar sind.Ein paar, die ich kenne auf HoloLens arbeiten, sind:

Beste HTTP

https://www.assetstore.unity3d.com/en/#!/content/10765

Uniweb

https://www.assetstore.unity3d.com/en/#!/content/40505

Es gibt viele andere auf der Aktivspeicher, aber diese sind die beiden, die ich habe versuchte HoloLens.