UniRxを使っていろいろなものをawaitしてみたメモです。(後で足すかも)
Unity2018.2
UniRx6.2.2
C#6
Resources.LoadAsync()
ResourceRequest
とかAsyncOperation
使ってる系はawaitできます。
using UnityEngine; using System.Threading.Tasks; using UniRx; public class Example : MonoBehaviour { private async Task Start() { var request = Resources.LoadAsync<Texture>("texture_example"); await request; Debug.Log(request.asset as Texture); } }
WWW
WWW
もawaitできます。
using UnityEngine; using System.Threading.Tasks; using UniRx; public class Example : MonoBehaviour { private async Task Start() { var www = new WWW("https://www.google.co.jp/"); await www; Debug.Log(www.text); } }
コルーチン
コルーチンもawaitできます。
using UnityEngine; using System.Threading.Tasks; using UniRx; using System.Collections; public class Example : MonoBehaviour { private async Task Start() { Debug.Log("start."); await ExampleRoutine(); Debug.Log("end"); } private IEnumerator ExampleRoutine() { yield return new WaitForSeconds(1); } }
Observable
Observableもawaitできます。
OnNext()
とOnCompleted()
を同時に呼ぶようなものに使えそうです。
using UnityEngine; using System.Threading.Tasks; using UniRx; public class Example : MonoBehaviour { private async Task Start() { Debug.Log(Time.frameCount); // Observableをawait // OnCompletedが来たらawaitを抜ける await Observable.TimerFrame(60); Debug.Log(Time.frameCount); } }