Ich versuche eine Post-Anfrage auf Windows Phone 8 von der Unity-Plattform zu machen. Ich möchte nicht die Unity-WWW-Methode verwenden, da dies das Rendering blockiert (und nicht threadsicher ist).
Der folgende Code funktioniert im Editor und auf Android, aber wenn ich ihn für WP8 erstelle, erhalte ich den folgenden Fehler.
System.Byte [] System.Net.WebClient :: UploadData (System.String, System.String, System.Byte []) 'existiert nicht im Zielframework.
Der Grund für diesen Fehler wird hier erklärt
Es liegt daran, dass Windows Phone 8 eine andere .NET-Variante namens .NET für Windows Phone verwendet, in der einige der auf anderen Plattformen verfügbaren Typen fehlen. Sie müssen diese Typen entweder durch andere ersetzen oder selbst implementieren. - Ссылка
Dies ist mein Code
%Vor%Ich habe auch WebRequests versucht, aber GetResponse () bricht es, und HttpClient existiert nicht.
Also, wie poste ich Daten in Unity, ohne WWW zu verwenden, auf Windows Phone 8?
AKTUALISIERUNG NACH KOMMENTARANFORDERUNG - WebRequests
Dieser Code, der HttpWebRequest verwendet, funktioniert im Editor und auf Android, aber auf Windows Phone wirft die Fehler unter dem Code.
%Vor%Fehler 1:
Fehler: Methode
System.IO.Stream System.Net.HttpWebRequest::GetRequestStream()
existiert nicht im Zielframework.
Fehler 2:
System.Net.WebResponse System.Net.HttpWebRequest::GetResponse()
existiert nicht im Zielframework.
UPDATE MIT MEHREREN DETAILS - UploadStringAsync
Wenn Sie diesen Code benutzen, um eine asynchrone Anfrage zu machen, dann funktioniert er wieder gut im Editor, Fehler werden auf den WP8 geworfen.
%Vor%Fehler 1
Methode
System.Void System.Net.WebClient::add_UploadDataCompleted(System.Net.UploadDataCompletedEventHandler)
existiert nicht im Zielframework.
Fehler 2
Fehler: Methode
System.Void System.Net.WebClient::UploadDataAsync(System.Uri,System.Byte[])
existiert nicht im Zielframework.
Fehler 3
Fehler: Geben Sie
System.Net.UploadDataCompletedEventArgs
nicht im Zielframework ein.
Fehler 4
Fehler: Methode
System.Byte[] System.Net.UploadDataCompletedEventArgs::get_Result()
existiert nicht im Zielframework.
Gehen Sie mit dem unten stehenden Code auf das Windows Phone. Kompiliert und läuft im Editor, auf Android und auf WP8 (yay!). Habe es noch nicht auf iOS ausprobiert.
schrieb auch einen Beitrag darüber hier: Erstellen Sie Web-Anfragen für die Einheit, die auf allen Plattformen funktionieren, sogar WP8
%Vor% Ich kenne keine möglichen Einschränkungen von Unity, aber Windows Phone 8 hat das WebClient.UploadStringAsync
Methode und die WebClient.UploadStringCompleted
event , um genau das zu tun.
HttpWebRequest
sollte ebenfalls funktionieren (ich kenne keine Unity-Einschränkungen - siehe obigen Kommentar, der um Klärung bittet).
Sie können diese Frameworks nicht als Einheit verwenden, da sie Threaded / Async sind / eine andere Version von .Net verwenden
Kurz gesagt:
Um dies auf Windows Phone zu tun, müssen Sie eine Klassenbibliothek erstellen (zwei in der Tat), welche Einheit ein Plugin
aufruftWarum also zwei dlls?
Weil der Editor eine Mockup-DLL benötigt (oder die tatsächliche, wenn Sie sie auch für den Desktop implementieren wollen), die die gleiche Schnittstelle wie die DLL implementiert, die mit Windows Phone kompatibel ist.
Um es klar zu sagen:
Sie sollten diese Funktionalität also in einer DLL implementieren, dann auf die Einheit verweisen und sie schließlich direkt aufrufen.
Alles wird hier erklärt: Ссылка
Es ist einfacher als es aussieht.
Ich weiß, du hast gesagt, du willst die WWW-Klasse nicht benutzen, aber die Gründe, die du angegeben hast, machen IMO nicht Sinn.
Wenn Sie eine Coroutine verwenden, um das Flag ".isDone" zu überprüfen und es nicht mit Thread.Sleep () zu überprüfen, blockiert es das Rendering nicht und ist threadsicher (da unity nur Zugriff auf seine Informationen zu einem einzelnen Thread bietet ).
Wenn Sie auf die Rückgabedaten eines anderen Threads zugreifen möchten, müssen Sie nur diese Daten im Unity-Hauptthread lesen und sie dann an den Thread weiterleiten, auf dem Sie sie verwenden möchten.
Unity by Design ist ein Run auf einen einzelnen Thread, um weniger erfahrenen Programmierern das Leben zu erleichtern. Obwohl Sie in der Lage sein sollten, mehrere Threads mit .NET-Threading zu erstellen, können Sie nicht direkt mit Unity-Komponenten kommunizieren, aber Sie können die Daten zurück an Unity übergeben und warten, bis Update oder ein anderer Aufruf von Unity die Daten verwendet. Ich weiß, dass dies Ihre Frage nicht genau beantwortet, aber wenn Sie es nicht lösen können, denke ich, dass es sich lohnen würde, sich erneut mit der WWW-Klasse und den Best Practices bei ihrer Verwendung zu befassen.
Tags und Links c# windows-phone-8 unity3d unityscript