Unity 2018.3 이상의 ObservableWWW 대안
ObservableWWW ObservableWWW
는 UniRx에서 UnityEngine.WWW
을 Observable
로 처리하는 편리한 기구입니다.
그러나 이것UnityEngine.WWW
은 그 자체가 상당히 오래되어 2019년이 되면 지금은 추천하지 않는다.UnityWebRequest
로 대체해야 함
이와 함께 유니티 2018.3 이후ObservableWWW
Obsolete
로 바뀌었다.
따라서 이번에는 유니티 2018.3 이후ObservableWWW
의 대체 수단을 소개한다.
원래 Unity 2018.3 이후에는 Observable WWW를 안 써도 돼요?
결국 유니티 2018.3의 경우 유니태스크를 사용할 수 있기 때문에 적극적으로 활용할 필요가 없다Observable
.
이런 일회 비동기 처리async/await
만으로도 충분하기 때문이다.
결론: UniTask 사용
따라서 결론은 "UniTask 사용"입니다.
GitHub에서 UniTask 배포
AssetStore에서 UniTask를 공개하지 않으므로 GitHub부터 배포해야 합니다.
결국 유니티 2018.3의 경우 유니태스크를 사용할 수 있기 때문에 적극적으로 활용할 필요가 없다
Observable
.이런 일회 비동기 처리
async/await
만으로도 충분하기 때문이다.결론: UniTask 사용
따라서 결론은 "UniTask 사용"입니다.
GitHub에서 UniTask 배포
AssetStore에서 UniTask를 공개하지 않으므로 GitHub부터 배포해야 합니다.
'UniTask'라는 프로젝트명이지만 역사적인 이유로 소프트웨어 패키지의 이름은'UniRx. Async'입니다.
UniTask를 사용하여 코드 작성
using UniRx.Async;
이후.WWW
대신 UnityWebRequest
대기async/await
를 사용하십시오.using System;
using UnityEngine;
using UniRx.Async;
using UnityEngine.Networking;
public class UnityWebRequestSample : MonoBehaviour
{
async void Start()
{
var uri = "https://unity.com/";
try
{
var result = await GetTextAsync(uri);
Debug.Log(result);
}
catch (Exception e)
{
Debug.LogException(e);
}
}
/// <summary>
/// UnityWebRequestをasync/awaitで待ち受ける
/// </summary>
private async UniTask<string> GetTextAsync(string uri)
{
var uwr = UnityWebRequest.Get(uri);
// SendWebRequestが終わるまでawait
await uwr.SendWebRequest();
if (uwr.isHttpError || uwr.isNetworkError)
{
// 失敗していたらそのまま例外をthrow
throw new Exception(uwr.error);
}
return uwr.downloadHandler.text;
}
}
이렇게 하면 돼.그래도 Observable이 좋아요.
여러 가지 상황에 따라 UniTask<T>
가 아닌 IObservable<T>
로 전환하고 싶을 때가 있다.
이 경우 ToObservable()
로 전환하는 것이 좋다.
핫을 유지할 수 있다면.
실행GetTextureObservable()
시 GetTextAsync()
을 시작할 수 있다면 이 방법을 사용하면 된다./// <summary>
/// UnityWebRequestを内部で利用したObservable
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
private IObservable<string> GetTextureObservable(string uri)
{
return GetTextAsync(uri).ToObservable();
}
/// <summary>
/// UnityWebRequestをasync/awaitで待ち受ける
/// </summary>
private async UniTask<string> GetTextAsync(string uri)
{
var uwr = UnityWebRequest.Get(uri);
// SendWebRequestが終わるまでawait
await uwr.SendWebRequest();
if (uwr.isHttpError || uwr.isNetworkError)
{
// 失敗していたらそのまま例外をthrow
throw new Exception(uwr.error);
}
return uwr.downloadHandler.text;
}
하면, 만약, 만약...
GetTextureObservable()
Subscribe()
의 정시에 GetTextAsync()
부터 실행하기를 원한다면 이 방법을 사용합니다.
사용하십시오Observable.Defer()
./// <summary>
/// UnityWebRequestを内部で利用したObservable
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
private IObservable<string> GetTextureObservable(string uri)
{
return Observable.Defer(() => GetTextAsync(uri).ToObservable());
}
/// <summary>
/// UnityWebRequestをasync/awaitで待ち受ける
/// </summary>
private async UniTask<string> GetTextAsync(string uri)
{
var uwr = UnityWebRequest.Get(uri);
// SendWebRequestが終わるまでawait
await uwr.SendWebRequest();
if (uwr.isHttpError || uwr.isNetworkError)
{
// 失敗していたらそのまま例外をthrow
throw new Exception(uwr.error);
}
return uwr.downloadHandler.text;
}
총결산
/// <summary>
/// UnityWebRequestを内部で利用したObservable
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
private IObservable<string> GetTextureObservable(string uri)
{
return GetTextAsync(uri).ToObservable();
}
/// <summary>
/// UnityWebRequestをasync/awaitで待ち受ける
/// </summary>
private async UniTask<string> GetTextAsync(string uri)
{
var uwr = UnityWebRequest.Get(uri);
// SendWebRequestが終わるまでawait
await uwr.SendWebRequest();
if (uwr.isHttpError || uwr.isNetworkError)
{
// 失敗していたらそのまま例外をthrow
throw new Exception(uwr.error);
}
return uwr.downloadHandler.text;
}
/// <summary>
/// UnityWebRequestを内部で利用したObservable
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
private IObservable<string> GetTextureObservable(string uri)
{
return Observable.Defer(() => GetTextAsync(uri).ToObservable());
}
/// <summary>
/// UnityWebRequestをasync/awaitで待ち受ける
/// </summary>
private async UniTask<string> GetTextAsync(string uri)
{
var uwr = UnityWebRequest.Get(uri);
// SendWebRequestが終わるまでawait
await uwr.SendWebRequest();
if (uwr.isHttpError || uwr.isNetworkError)
{
// 失敗していたらそのまま例外をthrow
throw new Exception(uwr.error);
}
return uwr.downloadHandler.text;
}
CancellationToken
을 자변량으로 설정한 경우ToObservable
진행할 수 없다.그러니까 이쪽 기사를 보세요.
Reference
이 문제에 관하여(Unity 2018.3 이상의 ObservableWWW 대안), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toRisouP/items/559eaf08eed12ec226bc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)