LoginSignup
0
0

More than 5 years have passed since last update.

UnityのWWWクラスで擬似的に通信切断のテストをする

Posted at

はじめに

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などにアプリをビルドするときには影響が出ない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0