Unity 管理www类访问的写法

在Unity开发中,为了便于管理大量的网络请求,可以创建一个名为WWWConnect的类,集中处理所有网络访问。将URL存储在统一位置,通过类的方法调用进行网络交互。本文介绍了使用POST方式的例子,以及一个简单的WWW访问方法。
摘要由CSDN通过智能技术生成


        在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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值