はじめに
Unityでアプリ開発をしている際、モバイル環境ではWifiオフや機内モードで比較的簡単に通信エラーをテストできるが、PCで開発している最中は意外と通信エラーを起こすのが手間になる。なのでWWWクラスのラッパーを作って無理やりエラーが起こった挙動を再現してテストする。
なおUnity 2018.3などではすでにWWWクラスは非推奨になりUnityWebRequestを使わなければならないのでこの記事は無意味である。
実装としてはWWWと同じプロパティを用意してエラーフラグが設定されていたら、実際に通信に成功していてもエラー時に返すであろう値を返している。
使い方
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
# if UNITY_EDITOR
using WWW = WWWWrapper;
# endif
public class WWWWrapperTest : MonoBehaviour
{
[SerializeField]
bool forceError = false;
[SerializeField]
float delay = 0.0f;
[SerializeField]
string url = "http://unity3d.com";
IEnumerator Start()
{
using (WWW www = new WWW(url))
{
www.delay = delay;
www.forceError = forceError;
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.text);
}
}
}
}
上記を適当なGameObjectにつけてインスペクタから forceError
のチェックを入れることで通信エラーが発生したような挙動を擬似的に再現させる。
また delay
に秒数をいれると yeild return www
で返ってくる時間を遅らせることができる。これで通信結果を待つのを忘れてUI表示が先に動いてしまった、みたいなバグを探しやすくなる。
# if UNITY_EDITOR
using WWW = WWWWrapper;
# endif
using
部分をエディタで実行時のみにしておくことでAndroidなどにアプリをビルドするときには影響が出ない。