Unity 管理www类访问的写法

来源:互联网 发布:淘宝网京东商城电器 编辑:程序博客网 时间:2024/06/06 06:13


        在Unity做项目中,避免不了与www类的交互,通常在一个很大的项目里,有很多方面会涉及到与网络的访问,但是用的比较多的时候,难免在管理上不会出现麻烦的事情,在这里提供一个简单的方法,个人观点还是方便使用的。


        整体的思路是把所有的www访问都写在一个脚本里,所有涉及到的链接URL都写在一个统一的地方,在需要调用的时候或者需要调用的地方去访问脚本里特别的方法。


首先,新建一个类WWWConnect,并继承System.IDisposable接口,其实这个接口并没有实际的用处,只是在后面使用到这个类的时候(using),要求有这个接口的实现:(在这里是以post访问为例)

public class WWWConnect : System.IDisposable{    public string url = "";    public delegate string actiondel(string arg);    public bool mDone;    public WWWConnect(string urltemp)    {        url = urltemp;    }    public IEnumerator WWWPost(WWWForm form, actiondel action)    {        mDone = false;        string urlString = url;        using (WWW www = new WWW(urlString, form))        {            while (!www.isDone)            {                yield return new WaitForSeconds(0.1f);            }            if (www.error == null)            {                action(www.text);            }            else            {                action("error");            }            mDone = true;        }    }    public void Dispose()    {        //throw new System.NotImplementedException();    }}

其次我们在新建一个脚本(UseWWW.cs),这个脚本我们最好设置成在Unity的任何场景中都可访问到,利用这个脚本我们写一个方法来调用我们上面写的这个类WWWConnect。


在这里我们先声明一个变量来存放我们要访问的URL

    private string url = "****.****.****";    public IEnumerator Usewww(string arg01,string arg02,System.Action<string> action)    {        string data = "";        WWWConnect.actiondel GetWWW = x => data = x;        using (WWWConnect wwwconnect = new WWWConnect(url))        {            WWWForm form = new WWWForm();            form.AddField("***", arg01);            form.AddField("***", arg02);            StartCoroutine(wwwconnect.WWWPost(form,GetWWW));            while (!wwwconnect.mDone)            {                yield return new WaitForFixedUpdate();            }            action(data);        }    }
其中arg01,arg02为post传值所需字段的内容;

然后我们再写一个对www访问结果的进行处理的方法:

public void DoWWW(string data)    {        if (data != "error")        {             //对内容的正常处理        }        else        {             //网络异常处理        }    }

最后,就在我们需要调用的地方调用它就可以了

StartCoroutine(Usewww("***", "***",DoWWW));


在本文的最后,在给大家分享一个访问www类的简单方法:

public IEnumerator HttpByGet(string url, float timeout)    {        WWW www = new WWW(url);        float endtime = Time.realtimeSinceStartup + timeout;        while (Time.realtimeSinceStartup < endtime)        {            if (www.isDone)            {                if (www.error == null)                {                    //网络没有异常,对数据进行处理www.text;                    DowwwForGet(www.text);                }                else                {                    //网络异常反馈null                    Debug.Log(www.error);                    DowwwForGet(null);                }                //交互完毕退出循环                www.Dispose();                yield break;            }            yield return null;        }        //在自定义的结束时间内反馈异常        Debug.Log(www.error);        DowwwForGet(null);        www.Dispose();//退出www    }
附上对网络访问结果的处理方法:

private void DowwwForGet(string data)    {         if(data != null)        {                    }        else        {                    }    }



本博客纯属个人观点,有不足之处,大家可一起探讨!

0 0
原创粉丝点击