原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1010/58.html
WWW类主要用于从网上下载资源,或从本地引用资源,本篇文章我们就来看看如何封装WWW类,
直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWTest {
/// <summary>
/// 下载路径
/// </summary>
private string url;
public string URL
{
set
{
url = value;
}
get
{
return url;
}
}
/// <summary>
/// 开始下载
/// </summary>
public virtual void BeginDownLoad()
{
}
/// <summary>
/// 下载结束
/// </summary>
public virtual void FinishDownLoad(WWW tepWWW)
{
}
/// <summary>
/// 下载出错
/// </summary>
public virtual void ErrorDownLoad()
{
}
/// <summary>
/// 下载协程
/// </summary>
/// <returns></returns>
public IEnumerator DownLoad()
{
BeginDownLoad();
WWW www = new WWW(URL);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
//下载成功
FinishDownLoad(www);
}
else
{
//下载失败
ErrorDownLoad();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWDownLoad : WWWTest {
/// <summary>
/// 构造方法
/// </summary>
/// <param name="url"></param>
public WWWDownLoad(string url)
{
Init(url);
}
/// <summary>
/// 丰富URL
/// </summary>
/// <param name="url"></param>
public void Init(string url)
{
if (Application.platform == RuntimePlatform.Android)
{
this.URL = "jar:file://" + url;
}
else if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
this.URL = "file:///" + url;
}
else
{
this.URL = "file://" + url;
}
}
public override void FinishDownLoad(WWW tepWWW)
{
Debug.Log(tepWWW.text);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DownLoading : MonoBehaviour {
public static DownLoading Instance;
/// <summary>
/// 下载队列
/// </summary>
Queue<WWWTest> DownLoadQueue;
/// <summary>
/// 是否下载完成
/// </summary>
private bool IsFinish;
private void Awake()
{
Instance = this;
}
void Start () {
DownLoadQueue = new Queue<WWWTest>();
IsFinish = true;
}
/// <summary>
/// 添加下载任务到下载队列中
/// </summary>
public void AddDownLoad(WWWTest test)
{
DownLoadQueue.Enqueue(test);
//如果下载完成 开启下载协程
if (IsFinish)
{
IsFinish = false;
StartCoroutine(DownLoad());
}
}
public IEnumerator DownLoad()
{
while(DownLoadQueue.Count > 0)
{
WWWTest test = DownLoadQueue.Dequeue();
yield return test.DownLoad();
}
IsFinish = true;
}
void Update () {
//调用
if (Input.GetKeyDown(KeyCode.A))
{
string url = Application.dataPath + "/WWW/WWWTest.cs";
WWWDownLoad download1 = new WWWDownLoad(url);
AddDownLoad(download1);
Debug.Log(123);
}
}
}
上篇:上一篇:
Unity3D粒子系统被2D的NGUI或者UGUI遮挡的问题
下篇:下一篇:
Untiy3D使用PlayerPrefs类实现本地数据加密