在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
{
}
}