Get,Post和WWW的使用

关于unity中Get,Post的用法
用unity做的手游中本来的安装包中基本都是一些资源和代码,而且其他的一些资源都要通过Get,Post来获取方法.
Get和Post操作都是WWW里面的操作,并且两个都是从服务器里面获取数据,只是Get属于获取的数据比较小,但是速度比较快,用户体验比较好,Post操作则是获取的数据比较大,信息比较安全,但是使用起来的时候就没有Get操作那么流畅。
还有就是Get操作是传输一个参数进去,其参数就在链接里面,问号后面的就是参数。
而Post操作则是传输一个表单进去,所有参数都在表单里面,服务器在底层中,看到Post操作就会自动分配一个比较大的空间给他。

如下unity中对于Get ,Post的一些操作:
public IEnumerator SendGet(string url)//Get操作
{
WWW www = new WWW(url);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
Debug.Log(“Getfinish=” + www.text);
}
}
public IEnumerator SendPost(string url,WWWForm form)//Post操作
{
WWW www = new WWW(url,form);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
Debug.Log(“Postfinish=” + www.text);
}
}
// Start is called before the first frame update
void Start()
{
string url = “http://kun.show.ghostry.cn/?int=5”;
StartCoroutine(SendGet(url));//开始Get协程
string ur2 = “http://kun.show.ghostry.cn/”;
WWWForm tmpform = new WWWForm();
tmpform.AddField(“int”,5);//开始Post协程
StartCoroutine(SendPost(ur2,tmpform));
}

其中ur1是Get操作要用到的网页地址,ur2则是Post操作要用到的网页地址,我们可以清楚的看到ur1的链接里面是有int=5这个参数的,而ur2里面没有,反而是多了一个WWWForm,这个就是表单。
这个网址是别人做的一个测试网址,主要功能就是把输入的int值加1,而以上两个操作都能完成这个功能。

WWW 下载本地资源是需要用使用不同的前缀的
如IOS 就是File:// ,
Android就是jar:file://,
Pc就是File:///

Public IEnumerator Download(string url)
{
WWW www=new WWW(ur1);
yield return www;
if(string.isNullOrEmpty(www.error))
{
Debug.Log(“finish=”+www.text);
}
}
//这就是对这个www类的添加前缀的封装,根据不同的平台加不同的前缀
Public string InitialUrl(string url)
{
if(Application.platformRuntimePlatform.WindowsEditor||Application.platformRuntimePlatform.WindowsPlayer)//pc
{
ur1=”File:///”+url;
}
else if(Application.plaiform==RuntimePlatform.Android)//Android
{ url=”jar:file://”+url;}
else//ios
{ url=”Flie://”+url;}
return url;
}
string url=Application.dataPath+”/WWW/TestWWW.cs”
url=InitialUrl(url);
StartCoroutine(DownLoad(url));
WWW 下载本地资源是需要用使用不同的前缀的
如IOS 就是File:// ,
Android就是jar:file://,
Pc就是File:///
Public IEnumerator Download(string url)
{
WWW www=new WWW(ur1);
yield return www;
if(string.isNullOrEmpty(www.error))
{
Debug.Log(“finish=”+www.text);
}
}

//这就是对这个www类的添加前缀的封装,根据不同的平台加不同的前缀
Public string InitialUrl(string url)
{
if(Application.platform == RuntimePlatform.WindowsEditor||Application.platformRuntimePlatform.WindowsPlayer)//pc
{
ur1=”File:///”+url;
}
else if(Application.plaiform
RuntimePlatform.Android)//Android
{ url=”jar:file://”+url;}
else//ios
{ url=”Flie://”+url;}
return url;
}
string url=Application.dataPath+”/WWW/TestWWW.cs”
url=InitialUrl(url);
StartCoroutine(DownLoad(url));

Application.dataPath
这个API一般都是在pc平台上进行测试用的,可以直接在自己工程文件夹里通过文件系统,如
File.streamWriter,File.streamReader去进行文件的读写。

Application.PersistentDataPath
这个API才是真正的使用者,在pc上的路径是C:/User/yujie/AppData;在Andriod上则是SD卡;
在iOS上则表现为DoCument;要使用文件系统去进行读和写的操作就必须在这个下面去操作。

Application.streamingAssetsPath
这个API则是工程文件下的streamingAssets文件夹,这个文件夹会跟随文件被一起打包发布,
所以里面的东西尽量不要太多。

例如在Android上的文件传输是这样的,在PersisitentDataPath下放一个空的数据库,streamingAssets下放一个数据库,通过www下载来从streamingAssets中下载数据库,刷新PersistentDataPath下数据库
数据,所以最后读取的其实是PersistentDataPath下的文件。(数据库需要用文件系统进行操作)

下载任务抽象基类如下:

public class WWWiterm
{
public virtual void BeginDownLoad()
{}
public virtual void FinishDownLoad(WWW www)
{}
public virtual void DownLoadError(WWWiterm iterm)
{ }
private string url;
public string URL
{get{return url;}set{url=value;}}
public IEnumerator DownLoad()
{
WWW www=new WWW(url);
yield return www;
if(string.IsNullOrEmpty(www.error))
{FinishDownLoad(www);}
else
{DownLoadError(this);}
}
}
下载队列代码如下:
public class WWWhelper:MonoBehaviour{
public static WWWhelper instance;//单例
public Queue alltask;
private bool isDownLoad;
public void AddTask(WWWiterm iterm)
{ alltask.Enqueue(iterm);
if(alltask.Count==1&&isDownLoad)//等于1的时候就开始下载,其余时候只添加
{isDownLoad=false;
StartCoroutine (DownLoadIterm());
}
}
public IEnumerator DownLoadIterm()
{
while(alltask.Count>0)
{WWWiterm iterm=alltask.Dequeue();
yield return iterm.DownLoad();//相当于双重for循环
}
isDownLoad=true;
}
void start()
{alltask=new Queue();instance=this;}

如果要下载Text文件就需要复写这个基类,如下:
public class WWWtext:WWWiterm
{
public WWWtext(string url)//析构函数
{this.URL=url;
initial(url);}
public void initial(string url)//这就是前面的增加前缀
{
if(Application.PlatformApplication.WindowsPlatform||
Application.Platform
Application.WindowsPlayer)
{url=“file:///”+url;}
else if(Application.Platform==Application.Android)
{url=“jar:file://”+url;}
else
{url=“file://”+url;}
}
public override void BeginDownLoad()
{ Debug.Log(“BeginDownLoad!”);}
public override void FinishDownLoad(WWW www)
{ Debug.Log(“Finish=”+www.text);//这里一般返回的是解析和解压的文件}
public override void DownLoadError(WWWiterm iterm)
{
WWWhelper.instance.AddTask(iterm);//如果出错就再次下载
}
}

实际调用方法如下:
string url=Application.datapath+"/WWW/WWWtest.cs";
WWWtext tmpText=new WWWtext(url);
WWWhelper.instance.AddTask(tmpText);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值