unityで非同期処理を行う際C#固有の機能であるasync/awaitの使いどころについて。
unityでは非同期をシングルスレッドで行うようなコルーチンという機能がありますが、
カスタムコルーチンが導入されたことにより、非同期はすべてコルーチンで行えばいいのではないかと思います。
そもそも、コンポーネント指向のunityにおいて同じオブジェクトにupdate関数を持ったスクリプトを2個張り付ければ非同期であるのではないでしょうか。
これで賄いきれないものをカスタムコルーチンで実装すればいいと思います。
例えばwwwクラス
IEnumerator Start() { // WWWクラスのコンストラクタに画像のURLを指定してダウンロードを開始する string url = "http://www.mybdesign.com/unityui/images/cat.jpg"; WWW www = new WWW(url); // 画像のダウンロードが完了するのを待つ yield return www; // ウェブサーバーから取得した画像をローイメージで表示する RawImage rawImage = GetComponent<RawImage>(); rawImage.texture = www.textureNonReadable; // ローイメージのサイズをピクセル等倍にする rawImage.SetNativeSize(); }
カスタムコルーチンにより、 CustomYieldInstructionを継承したクラスでkeepWaitingをオーバーライドすればwwwで
スクレイピングを行っている最中はメインスレッドに処理を戻しておます。この動きはasync/await同じ動きですよね?
また、ここで処理をもどしているといってもwebと通信は行っているので実質マルチスレッドなのでやはり非同期。
コルーチンになったStartが実行。
↓
webと通信 ここでコルーチンは中断
↓
メインスレッドに処理を戻す。 ここで平行してwebで通信をしているので実質マルチスレッドなのでは?????
↓
↓ 通信が完了 ↓ 中断していたコルーチンを再開 ↓ コルーチンが完了したので、メインスレッドに処理を戻す。 async/awaitをわざわざ使う意義とは?

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。