【Unity】【C#】【UniRx】UniRxを使っていろんなものをawaitする

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);
    }
}

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com