2017-02-24 21 views
0

Windowsストアプラットフォーム(ユニバーサル10 SDK)のために、アプリケーションを1つにまとめる(5.4.0f3)。 私はホロレンズで走ります。WindowsストアビルドのWebClientクラス - ユニティのビルドエラー

スクリプトをコンパイルする際に問題が発生しています。使用しているWebClientクラスが原因であるようです。私はHttpClientを別の投稿で推奨されているように使ってみましたが運がありません。 UnityでWebClientクラスを使用してビルドした人もいますが、Windows Store用にビルドしていないと思います。

私は取得していますコンパイルエラー: エラーCS0246:型または名前空間名「のWebClient」が見つかりませんでしたが(?あなたがusingディレクティブまたはアセンブリ参照が不足している) 名「Webクライアント」は存在しません現在のコンテキスト

Unityとの作業を開始したばかりですが、WebClientを使用するコードの周りにいくつかのディレクティブを追加したり、新しいWebClientを宣言してコンパイルしてホロレンス。

「プラットフォーム依存のコンパイル」ページ(https://docs.unity3d.com/Manual/PlatformDependentCompilation.html)がこれを説明しているようです。 私はそれらのうちのいくつか(UNITY_WSA、UNITY_WSA_10_0など)を使ってみましたが、運はありませんでした。現在、Yahoo Finance APIを使用しています。webClient.DownloadFile(url, stockFile);は、.csvファイルをダウンロードします。 提案がありますか?

答えて

0

WebClient.DownloadFileを使用していることに気付きました。 は、ファイルのダウンロードが完了するまでブロックされますので、DownloadFile関数を使用してください。今回は、メインスレッドがブロックされているためUIがフリーズすることがあります。

WebClient APIを使用する場合は、DownloadFileAsync関数を使用する必要があります。 Hereはそれを行う方法の例です。

ホロレンス以外のプラットフォームでWebClientを使用できます。ホロレンスにWWWまたはUnityWebRequestを使用してから、File.WriteAllBytesを使用して、ダウンロードが完了した後にファイルを保存できます。

擬似コードは次のようになります。

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

完全なコード:

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 

使い方:あなたはまだエラーが出るならば、あなたも使用している

downloadFile(); 

Hololensでサポートされていない名前空間。それをうまく処理する必要があります。あなたは以下のようにそれを修正することができ、namepsaceがSystem.Net;あるというのをしてみましょう:

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

素晴らしいです!コルーチンが返ってきたかどうかはどうすればわかりますか? – user3501476

+0

これを行うには 'Action'を使います。 [this](http://stackoverflow.com/a/30270515/3785314)を見てください。まだ混乱している場合は、新しい質問をしてください。 – Programmer

0

プログラマーが彼の答えに言及したように彼は別の選択肢を示唆したとして、独自の圧延するものを使用することであるほか、Webクライアントは、HoloLensプラットフォーム上に存在しませんUnity Asset Storeで利用可能なクライアントの数。私はHoloLensに取り組む知っているカップルは、以下のとおりです。

ベストHTTP

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

Uniweb

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

あり多くの人が資産ストア上にあるが、これらは私が持っている2つですHoloLensを試しました。

関連する問題