Unity2019.1.2f1 + UniRx6.2.2 ObservableWWWでOKとNGな場合

Unity2019.1.2f1 + UniRx6.2.2 ObservableWWWでOKとNGな場合が出たのでメモ。


// ok

        var uwr = UnityWebRequest.Get(URL_GET);
        yield return uwr.Send();
        Debug.Log(uwr.downloadHandler.text);

// ok

        ObservableWWW.GetWWW(URL_GET, headers, progress).Subscribe(x =>
        {
            Debug.Log(x.text);
        });

// ng

        var www1 = ObservableWWW.GetWWW(URL_GET, headers, progress).StartAsCoroutine(
                (obj) => Debug.Log(obj.text),
                e => Debug.Log(e.ToString())
            );
        yield return www1;

// ng

        var www2 = ObservableWWW.GetWWW(URL_GET, headers, progress).ToYieldInstruction();
        yield return www2;
        if (www2.HasError) { Debug.Log(www2.Error.ToString()); }
        if (www2.HasResult) { Debug.Log(www2.Result.text); }

ngはobj,www2.Resultまでは確認できるけど
その中身はすでに参照が消えていてNullReferenceExceptionが発生します。

そもそもWWWでのアクセスはクラスが古いのでやめておいたほうがいいということもあるので
ObservableWWをそのままコピペしてUnityWebRequestに変えてObservableWebRequestで実験。


// ok

        ObservableWebRequest.GetUnityWebRequest(URL_GET, headers, progress).Subscribe(
            x => Debug.Log(x.downloadHandler.text)
        );

// ng

        var www1 = ObservableWebRequest.GetUnityWebRequest(URL_GET, headers, progress).StartAsCoroutine(
                (obj) => Debug.Log(obj.text),
                e => Debug.Log(e.ToString())
            );
        yield return www1;

// ng

        var www2 = ObservableWebRequest.GetUnityWebRequest(URL_GET, headers, progress).ToYieldInstruction();
        yield return www2;
        if (www2.HasError) { Debug.Log(www2.Error.ToString()); }
        if (www2.HasResult) { Debug.Log(www2.Result.text); }

細かくは調べてないけどとりあえずメモがてら。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください